我有一个包含以下列的表:
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
这一次只能处理一个批次,但是我需要它查看表中的所有批次。如您所知,我是一个初学者,所以请随您所想,一切都很好。
答案 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的所有行李的累计重量。