gpt4 book ai didi

sql - Postgresql 按日期排序但随机

转载 作者:行者123 更新时间:2023-11-29 13:05:05 24 4
gpt4 key购买 nike

我正在尝试提取数据并按日期排列,但它以随机顺序出现。我试过了

SELECT * FROM table ORDER BY article_date_added::DATE DESC, RANDOM() limit 30;

我试过了

SELECT * FROM table ORDER BY to_timestamp(to_char(article_date_added, \'DD Mon YYYY HH24\'), \'DD Mon YYYY\') DESC, RANDOM()

它会获取最新的文章,但随后会按天随机生成。所以它会像

April 1
March 29
March 31
Apr 1

我试图获得按日期分隔的结果,然后随机生成。

April 1
April 1
March 31
March29

有没有办法在 SQL 中执行此操作?

最佳答案

那么,您希望将每一天组合在一起,但日期以随机顺序显示,对吗?我们可以使用内置函数 generate_series,它可以采用时间戳参数来制作一个可以提供帮助的伪表。

WITH t AS (
SELECT gs::date AS dt, random() AS r
FROM generate_series('2010-01-01'::timestamp, '2015-01-01', '1 day') AS gs )
SELECT articles.*
FROM articles JOIN t
ON articles.article_date_added::date=t.dt
ORDER BY r;

请注意,输出列中没有必要包含 r

显然此代码只能再使用 2 年 9 个月,但必要的修改应该是显而易见的。您甚至可以将硬连线日期替换为 (SELECT min(article_date_added) FROM articles) [注意额外的括号!] 对于 max 也是如此。


[评论后编辑] 在查看示例输出时,我发现您不希望按日期聚合。我不确定描述是否与输出匹配。您所要求的可能在其他建议之一中,但您可以使用

轻松完成
WITH t AS (
SELECT * FROM articles
ORDER BY article_created_date DESC LIMIT 30 )
SELECT * FROM t ORDER BY t.article_created_date desc, random();

关于sql - Postgresql 按日期排序但随机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15747165/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com