sql - SQL 在满足某个值之前选择所有值
问题描述
我有一个results
看起来像这样的表:
ID | 评分 | 天 |
---|---|---|
1 | 5 | '2001-01-01' |
1 | 10 | '2001-02-01' |
1 | 8 | '2001-03-01' |
2 | 3 | '2001-01-01' |
2 | 10 | '2001-02-01' |
3 | 2 | '2001-01-01' |
3 | 5 | '2001-02-01' |
3 | 3 | '2001-03-01' |
4 | 8 | '2001-01-01' |
5 | 10 | '2001-01-01' |
我想选择在rating = 10
到达之前或到达时到达的所有行,以获得如下内容:
ID | 评分 | 天 |
---|---|---|
1 | 5 | '2001-01-01' |
1 | 10 | '2001-02-01' |
2 | 3 | '2001-01-01' |
2 | 10 | '2001-02-01' |
5 | 10 | '2001-01-01' |
执行此操作的 SQL 查询是什么?
解决方案
SELECT *
FROM table t1
WHERE NOT EXISTS ( SELECT NULL
FROM table t2
WHERE t1.id = t2.id
AND t1.day > t2.day
AND t2.rating = 10 )
AND EXISTS ( SELECT NULL
FROM table t3
WHERE t1.id = t3.id
AND t3.rating = 10 );
WITH
cte AS ( SELECT *, SUM(rating = 10) OVER (PARTITION BY id ORDER BY day DESC) ok
FROM table )
SELECT *
FROM table
WHERE ok;
推荐阅读
- javascript - 使用 Node.JS 的 AWS 时间流
- html - 阻止 iframe 重新加载
- apache-spark - 在 hive 表中生成前导值
- python - win32com excel缺少工作簿属性
- python - 如何在 for 循环中将一组参数传递给 PythonOperator() 中的 op_args?
- javascript - 使用 Dialogflow API 与机器人对话
- reactjs - Antd TimePicker 无法正确渲染
- database - MongoDB:列出用户名和他们收到的回复数量
- .net-5 - 容器没有响应端口:3000 上的 HTTP ping,
- sql - 如何避免在 XML AUTO 查询中嵌套