首页 > 解决方案 > 在 Amazon Redshift 中按日期对周数据进行排序

问题描述

我正在尝试按日期对数据进行排序,尽管脚本只有周数据。

下面给出了一个示例 SQL:

SELECT
  CONCAT(CONCAT('Week', ''), 
         EXTRACT(WEEK FROM sale_date ::date + '1 day'::interval)
        ),
  COUNT(*)
FROM sales
WHERE sale_date between '2018-12-29' AND '2019-01-04'
GROUP BY CONCAT(CONCAT('Week', ''), 
                EXTRACT(WEEK FROM sale_date ::date + '1 day'::interval)
               )
ORDER BY 1 ASC

上面的脚本运行得很好,但是当它对最终输出进行排序时,它首先对第 1 周和第 52 周进行排序,而不是我试图按实际日期进行排序,以便 W52 首先出现(因为它是 2018-12),而 W1 出现在最后。

电流输出:

Week1,101
Week52,2350

预期输出:

Week52,2350
Week1,101

我正在使用 Amazon Redshift 数据库。

标签: sqlamazon-web-servicesamazon-redshift

解决方案


这应该有效:

SELECT week, count FROM (
    SELECT week, MAX(sale_date) max_date, COUNT(*) count FROM (
        SELECT sale_date,
            CONCAT('Week', EXTRACT(WEEK FROM sale_date::date + '1 day'::interval)) AS week
        FROM sales
        WHERE sale_date between '2018-12-29' AND '2019-01-04'
    )
    GROUP BY week
) ORDER BY max_date ASC

如果空间每超过一年,就会得到奇怪的结果。


推荐阅读