用时间戳记计数查询

时间:2018-11-12 12:01:28

标签: sql postgresql group-by

我想创建一个计数查询(在Postgres中),该查询根据data.data_namedata.todb_date进行计数。

所以我要查询的内容是所有高于WHERE子句中要求的行。我尝试了Count(data.data_name)Count(*),但是它们没有用。

我的计划结果如下:

todb_date: 2016-01-01 
data.data_name : test1
count: 150

todb_date: 2017-01-01 
data.data_name : test1
count: 130

这是我尝试过的查询:

SELECT data.data_name, parentdata.data_id, 
       data.data_id, parentdata.todb_date, 
       COUNT (data.data_name) 
FROM parentdata, data 
WHERE parentdata.data_id = data.data_id 
  AND parentdata.todb_date > '2016-01-01'
GROUP BY parentdata.data_id, data.data_id, data.data_name, parentdata.todb_date

1 个答案:

答案 0 :(得分:1)

就像@Usagi Miyamoto所建议的那样,您应该使用data_trunc()函数根据一定的时间增量(这里是每年)对结果进行分组:

SELECT d.data_name nam, date_trunc('year',p.todb_date) yr, COUNT(*) cnt 
FROM parentdata p 
INNER JOIN data d ON p.data_id = d.data_id AND p.todb_date > '2016-01-01'
GROUP BY d.data_name,date_trunc('year',p.todb_date)
ORDER BY nam, yr

如果将'year'替换为'date',则会获得每日计数,请参阅here