sql - 在 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 数据库。
解决方案
这应该有效:
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
如果空间每超过一年,就会得到奇怪的结果。
推荐阅读
- wordpress - Unable to create directory wp-content/uploads/2020/03. Is its parent directory writable by the server?
- dictionary - 使用带有 PageView 的表单会用每个页面 Flutter 覆盖以前的表单数据
- docker - 通过 dockerized Nginx 反向代理对 dockerized jenkins 的 SSL 通行证将不起作用
- javascript - 如何将组件作为道具传递给 React 中的另一个组件?
- rest - 如何使用 Axios 在 nuxtServerInit 中处理多个调度
- c++ - (VSC) 运行命令时的终端问题 (C++)
- rust - How to take the first element of a BTreeSet without clone
- linux - 如何在 lvvmpipe 软件渲染器中激活 OpenGL 3.3 核心配置文件?
- node.js - 我已经在我的 digitalocean droplet 上创建了一个 postfix 服务器,现在如何通过 nodemailer 连接?
- regex - Vim Regex 匹配所有不在括号内的逗号