如何在PostgreSQL中分组数据?
此PostgreSQL查询基本上显示了12小时内较旧的数据列表如何在PostgreSQL中分组数据?,postgresql,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是“主键” 我想要实现的是对url列进行分组,例如: pkey | url | last_vis
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是“主键”
我想要实现的是对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,尤其是在函数分组中。TIA您可以在以下位置使用DISTINCT: 从列表中选择不同的(url)pkey、url、上次访问的网站,其中((现在()-上次访问)>间隔“12小时”或上次访问为空)按url ASC排序
您可以在以下位置使用DISTINCT: 从列表中选择不同的(url)pkey、url、上次访问的网站,其中((现在()-上次访问)>间隔“12小时”或上次访问为空)按url ASC排序
按主键分组没有意义。因为根据定义,它是唯一的,所以每个主键总是有一个组 显然,您只想看到每个url一次。在这种情况下,您必须决定您希望看到的pkey和last_访问值 下面为每个唯一url值选择访问的第一个最后一个_和最低的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演示:
如果您需要更多的专栏,您需要一种不同的方法(您应该从一开始就提到这一点):
请参见我更新的SQLFiddle示例:
下次请在您的初始问题中包含所有要求,不要一点一点地向我们提供 按主键分组没有意义。因为根据定义,它是唯一的,所以每个主键总是有一个组 显然,您只想看到每个url一次。在这种情况下,您必须决定您希望看到的pkey和last_访问值 下面为每个唯一url值选择访问的第一个最后一个_和最低的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演示:
如果您需要更多的专栏,您需要一种不同的方法(您应该从一开始就提到这一点):
请参见我更新的SQLFiddle示例:
下次请在您的初始问题中包含所有要求,不要一点一点地向我们提供 请注意,如果没有完整的ORDERBY子句,
DISTINCT ON
不一定是确定性的。我想我已经解释了我要做的事情。我甚至把我想要的输出放在lol上。无论如何,感谢没有完整的ORDER BY子句,DISTINCT ON
不一定是确定性的。我想我已经解释了我要做的事情。我甚至把我想要的输出放在lol中。无论如何,感谢这一个可以工作,但如果你包括其他列,如select min(pkey)、url、min(上次访问)、url2、url3,就不行了example@KennethPalaganas:那么url2突然从何而来。你不认为你应该在最初的问题中提到这一点吗?请参阅“我的编辑”以获得解决方案。如果您包含其他列,如select min(pkey)、url、min(上次访问)、url2、url3,则此选项不起作用example@KennethPalaganas:那么url2突然从何而来。你不认为你应该在最初的问题中提到这一点吗?请参阅我的编辑以获取解决方案。
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;