sql - 通过比较日期 SQL 过滤数据
问题描述
我有以下数据的表格:
Order_ID | 状态更新 | 状态日期 |
---|---|---|
一个 | 已收到 | 2020 年 1 月 1 日 |
一个 | 待办的 | 2020 年 1 月 5 日 |
一个 | 加工 | 2020 年 1 月 7 日 |
一个 | 发表 | 2020 年 1 月 15 日 |
乙 | 已收到 | 2020 年 2 月 1 日 |
C | 已收到 | 2020 年 2 月 15 日 |
C | 发表 | 2020 年 2 月 20 日 |
D | 已收到 | 2020 年 5 月 1 日 |
D | 发表 | 2020 年 5 月 10 日 |
现在,我想获取 2020 年 1 月 15 日至 2020 年 4 月 25 日之间的完整订单历史记录,最后状态更新已交付。
结果看起来像:
Order_ID | 状态更新 | 状态日期 |
---|---|---|
一个 | 已收到 | 2020 年 1 月 1 日 |
一个 | 待办的 | 2020 年 1 月 5 日 |
一个 | 加工 | 2020 年 1 月 7 日 |
一个 | 发表 | 2020 年 1 月 15 日 |
C | 已收到 | 2020 年 2 月 15 日 |
C | 发表 | 2020 年 2 月 20 日 |
如何编写 SQL 查询来获得此结果?
解决方案
假设您想要 2020 年 1 月 1 日到 2020 年 4 月 25 日之间交付的所有订单的历史记录:
SELECT *
FROM orders o
WHERE EXISTS (
SELECT FROM orders o1
WHERE o1.order_id = o.order_id
AND o1.status_update = 'Delivered'
AND o1.status_date BETWEEN '2020-01-15' AND '2020-04-25'
)
ORDER BY order_id, status_date
这包括 2020-01-15 之前的行,只要交货日期在时间范围内。在外部添加另一个谓词以SELECT
截断 2020-01-01(或任何日期)之前的行:
AND o.status_date >= '2020-01-15'
db<>在这里摆弄
另外:始终使用明确的 ISO 格式作为日期。
推荐阅读
- entity-framework - 实体框架 6 关系和包容性问题
- python-3.x - Python 3.x 索引和切片
- arduino - ESP32 交替使用 BLE 和 WiFi
- azure - 我可以将代码从 DevOps 部署到在 Linux 容器上运行的 Azure Web 吗?
- javascript - 在 iframe 内的 iframe 滚动页面上
- identityserver4 - Identity Server 4 未释放内存
- sql - 带有平面文件源的 SSIS 平面文件目标
- javascript - 使用 PWABuilder 中的缓存优先网络服务工作者永远不会更新?
- r - 如何解决阻止我在 Ubuntu 18.04 上安装 R 4.0 的依赖项错误?
- python - 从 cron 运行脚本时运行外部程序