【发布时间】:2016-04-07 03:04:50
【问题描述】:
我需要您的帮助来修改查询以完成要求。
根据 GATHER_TIME,我想显示 NAME 的值。 查询每 1 分钟运行一次,它应该一直得到 2 行。 如果当时没有数据,它应该获取过去(1 分钟前)的 Name 数据。
这里,具体要求是我不应该考虑时间戳值(GATHER_TIME)中的秒值。
我尝试进行如下查询。 它只获取最新数据。
你能帮帮我吗?
查询
select NAME,sum(VALUE)
FROM TestTable
WHERE substring(to_char(gather_time,'YYYY-MM-DD HH24:MI:SS'),1,16) IN ( SELECT MAX(substring(to_char(gather_time,'YYYY-MM-DD HH24:MI:SS'),1,16)) FROM TestTable )
GROUP BY NAME
表格数据
NAME COL1 COL2 GATHER_TIME VALUE
------------------------------------------------
first prince PQ1 2015-12-29 13:10:33 11
first prince PQ2 2015-12-29 13:10:33 14
first prince PQ3 2015-12-29 13:10:33 18
first prince PQ4 2015-12-29 13:10:33 19
second prince TT1 2015-12-29 13:10:59 20
second prince TT2 2015-12-29 13:10:59 29
second prince TT3 2015-12-29 13:10:59 43
first prince PQ1 2015-12-29 13:11:37 71
first prince PQ2 2015-12-29 13:11:37 74
first prince PQ3 2015-12-29 13:11:37 78
first prince PQ4 2015-12-29 13:11:37 79
要求的结果
@ Query time: 2015-12-29 13:10:59
first 62
second 92
@ Query time: 2015-12-29 13:11:59
first 302
second 92
补充:
对不起。我应该放更详细的测试数据。更新了。
如果在 GROUP BY:: 中使用了两列(需要验证)
SELECT DISTINCT ON (name,col1,gather_time) name,col1,SUM(value)
FROM test_table
GROUP BY name,col1,gather_time
ORDER BY gather_time DESC
LIMIT 2;
【问题讨论】:
-
使用
order by gather_time和limit 2,我认为这会给你想要的结果 -
问题描述不正确; 2 示例语句应具有一致的
ORDER;对于2015-12-29 13:10:59查询时间,您有ASC订单,但对于查询时间2015-12-29 13:11:59,您有DESC
标签: sql postgresql greatest-n-per-group