T-SQL最大权重查询

时间:2018-08-11 08:41:47

标签: sql-server tsql stored-procedures

我有一个包含以下列的表:

public static void main(String[] args) throws IOException {
    String strTest = "D:\\Temp.jsp";
    File file = new File(strTest);
    BufferedReader reader = new BufferedReader(new FileReader(file));
    String strLine = "";
    boolean selectStartFound = false;
    Pattern pattern = Pattern.compile("<option .*?>(.+?)</option>");
    Matcher matcher = null;
    while ((strLine = reader.readLine()) != null) {
        if (!selectStartFound && strLine.toLowerCase().contains("<select")) {
            selectStartFound = true;
        }
        if (selectStartFound) {
            matcher = pattern.matcher(strLine);
            if (matcher.find()) {
                System.out.println(matcher.group(1));
            }
        }
        if (selectStartFound && strLine.toLowerCase().contains("</select>")) {
            selectStartFound = false;
        }
    }
    reader.close();
}

每批次最多可容纳30个袋子,其他各栏不言自明。

我需要的是一个查询,该查询可以找到每批产品的最大累积重量,这是我到目前为止所拥有的。

BatchNumber, BagNumber, BagWeight, CumulativeWeight

这一次只能处理一个批次,但是我需要它查看表中的所有批次。如您所知,我是一个初学者,所以请随您所想,一切都很好。

3 个答案:

答案 0 :(得分:0)

简单的GROUP BY应该可以完成工作:

SELECT BatchNumber, MAX(CumulativeWeight)
FROM my_table
GROUP BY BatchNumber

答案 1 :(得分:0)

with batches_ranked as
(
    select BatchNumber, BagNumber,
        CumulativeWeight = sum(Weight) over (partition by BatchNumber order by BagNumber),
        [Rank] = row_number() over (partition by BatchNumber order by BagNumber desc)
    from FSD3BagLog
)
select * from batches_ranked where [Rank] = 1

类似于表中存储的CumulativeWeight的声音,如果随BagNumber一起增加,那么您可以将查询简化为:

select BatchNumber, max(BagNumber), max(CumulativeWeight)
from FSD3BagLog group by BatchNumber

答案 2 :(得分:0)

是的GROUP BY似乎正确,使用正确的存储模型应该是:

SELECT BatchNumber, COUNT(BagNumber), SUM(BagWeight)
FROM FSD3BagLog
GROUP BY BatchNumber

结果:100, 30, 600 (其中批号= 100,每批有30,每袋重量= 20)

但是根据您当前的工作查询,您看起来好像正在存储数据去噪并存储累积的权重,可能是使用触发器或更新表时触发的其他代码。

因此,如果累积重量代表给定批次的总重量,则可以摆脱它,并使用上面的查询。

如果还有其他累积重量,例如在某个特定时间点之前所有行李的总重量,您仍然可以摆脱它。在这种情况下,您可以简单地执行以下操作:

SELECT BatchNumber, SUM(BagWeight) AS CumulativeWeight
FROM FSD3BagLog
WHERE ModifiedDate <= '2018-08-11 06:18:00'

鉴于您将ModifiedDate作为一列存储在表格中,这将为您提供截止到今天上午6:18的所有行李的累计重量。