批量处理的数据会存入结果表,为了统计结果表各分组的数据总量及开始结束时间,写出如下SQL语句:
SELECT ta.groupId,
ta.total,
tb.startTime,
tc.endTime
FROM (SELECT t.groupId, count(*) toatal
FROM result_table t
GROUP BY t.groupId) ta
LEFT JOIN (SELECT *
FROM (SELECT ROW_NUMBER() OVER(PARTITION BY t.groupId ORDER BY t.updateTime) rn
t.groupId,
t.updateTime startTime
FROM result_table t) tm
WHERE tm.rn = 1) tb
ON tb.groupId = ta.groupId
LEFT JOIN (SELECT *
FROM (SELECT ROW_NUMBER() OVER(PARTITION BY t.groupId ORDER BY t.updateTime desc) rn
t.groupId,
t.updateTime endTime
FROM result_table t) tm
WHERE tm.rn = 1) tc
ON tc.groupId = ta.groupId;
ROWNUM
用于获取所有数据排序,ROW_NUMBER()
用于获取各分组下的排序,此处需要获取各分组第一条数据,所以使用ROW_NUMBER()
方法。
此仍存在优化空间。