[英]How to group data in PostgreSQL?
该PostgreSQL查询基本上显示的是12小时之前的数据列表。
SELECT * FROM listing_websites
WHERE ( ( NOW() - last_visited ) > INTERVAL '12 hour' OR last_visited IS NULL )
GROUP BY url,pkey ORDER by pkey ASC
显示的数据将如下所示。 pkey是“主键”
pkey | url | last_visited
12 | link1 | 2012-11-08 17:06:49.553515
13 | link2 | 2012-11-07 05:36:55.270243
14 | link1 | 2012-11-09 08:54:33.51958
15 | link3 | 2012-11-03 16:29:17.20889
17 | link1 | 2012-11-08 05:54:33.51958
我要实现的是将url列分组,例如:
pkey | url | last_visited
12 | link1 | 2012-11-08 17:06:49.553515
13 | link2 | 2012-11-07 05:36:55.270243
15 | link3 | 2012-11-03 16:29:17.20889
预先感谢任何可以解决此问题的人。 无论如何我还是在学习postgresql,尤其是在GROUP BY函数中。 TIA
按主键分组没有任何意义。 因为按照定义,它是唯一的,所以每个主键总是可以得到一组。
显然,您只希望一次查看每个网址。 在这种情况下,您必须确定要与此一起查看的pkey和last_visited值。
以下为每个唯一的url值选择第一个last_visited和最低的pkey值:
select min(pkey), url, min(last_visited)
from listing_websites
where ( ( NOW() - last_visited ) > INTERVAL '12 hour' OR last_visited IS NULL )
group by url;
它给出了示例输出,但是我不确定这是否是您想要的。
在此处查看SQLFiddle演示: http ://sqlfiddle.com/#!12/2cbf7/1
如果您需要更多列,则需要一种不同的方法(并且应该从一开始就提到):
select *
from (
select pkey, url, last_visited, url2, url3,
row_number() over (partition by url order by pkey) as rn
from listing_websites
where ( ( NOW() - last_visited ) > INTERVAL '12 hour' OR last_visited IS NULL )
) t
where rn = 1;
请参阅我更新的SQLFiddle示例: http ://sqlfiddle.com/#!12/6236f/1
下次,请在您的第一个问题中包含所有要求,不要将其一点一点地提供给我们。
您可以使用DISTINCT ON:
SELECT DISTINCT ON(url)pkey,url,last_visited from listing_websites WHERE((NOW()-last_visited)> INTERVAL '12 hours'或last_visited IS NULL)ORDER BY url ASC;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.