CREATE TABLE t
    (STUDENT int, SCORE int, DATE date)
;
    
INSERT INTO t
    (STUDENT, SCORE, DATE)
VALUES
    (1, 6, '2022-02-01 00:00:00'),
    (1, 2, '2022-03-12 00:00:00'),
    (1, 5, '2022-04-30 00:00:00'),
    (2, 2, '2022-04-12 00:00:00'),
    (2, 0, '2022-04-17 00:00:00'),
    (2, 7, '2022-05-08 00:00:00'),
    (3, 2, '2022-03-16 00:00:00'),
    (3, 3, '2022-03-18 00:00:00'),
    (3, 2, '2022-04-02 00:00:00'),
    (3, 9, '2022-04-27 00:00:00'),
    (4, 4, '2022-02-24 00:00:00'),
    (4, 0, '2022-02-26 00:00:00'),
    (5, 3, '2022-01-28 00:00:00'),
    (5, 0, '2022-02-21 00:00:00'),
    (5, 4, '2022-04-05 00:00:00')
;

SELECT STUDENT, min(DATE) as min_date
from t
where SCORE = 2
group by STUDENT

这是可行的,但我希望包括所有的‘学生’,如果一个学生在任何时候的分数都不是2,则日期的值为空

推荐答案

您正在寻找条件聚合:

SELECT student, MIN(CASE WHEN score = 2 THEN date END) AS min_date
FROM t
GROUP BY student
ORDER BY student;

演示:https://dbfiddle.uk/vuhN0h_s

Sql相关问答推荐

无法找到正确的SQL查询需求

BigQuery`喜欢ANY‘和`不喜欢ANY’

使用DatePart函数对日期时间值进行分组

HAVING子句内部过滤的正确方法

如何解决错误;ORA-00911:无效字符;在果朗?

SQL:使用年/月/日分区查询某个时间段的数据

用另一个表中的特定名称替换 SQL 查询中的 ID.但我的两个表都有多个列

每个分组最多 Select 最后 2 个值并并排显示它们

显示所有组并计算给定组中的项目(包括 0 个结果)

Postgresql - 如何根据阈值计算累积和

每次计数器增加时通过运行总重置进行分组

如何使用SELECT语句进行左连接,并根据右表中的特定值过滤结果?

SQL中如何转置表格 UNPIVOT是唯一的 Select 吗?

Oracle PL/SQL长期运行问题

使用给定的变量对在循环中执行更新语句

使用in和and运算符过滤记录的条件

SQL日期比较用例;月初至今的报告

面对来自以下两个代码的不同输出

如何根据 Amazon Athena 中的多个列值删除重复行?

创建一个将层次 struct 级别放入列中的查询