sql中如何在按案件号分组后,取到日期最小的日期对应的负责人
时间: 2024-11-22 17:42:50 浏览: 10
在SQL中,你可以使用`GROUP BY`和`MIN()`函数结合子查询或者窗口函数(如果数据库支持)来实现这个需求。假设有一个名为`cases`的表,包含`case_id`, `date`, 和 `responsible_person`字段,以下是一个基本的例子:
```sql
SELECT case_id, MIN(date) AS min_date, responsible_person
FROM cases
GROUP BY case_id, responsible_person;
```
这个查询会将每个案件号(`case_id`)和负责人的组合(`responsible_person`)按照日期分组,并返回每个组中的最早日期(`min_date`)及其对应的负责人。
如果你的数据库支持窗口函数如MySQL的`LEAD()`或`LAG()`,还可以这样做来避免子查询:
```sql
SELECT c1.case_id, c1.date, c1.responsible_person
FROM (
SELECT case_id, date, responsible_person,
ROW_NUMBER() OVER (PARTITION BY case_id, responsible_person ORDER BY date) as row_num
FROM cases
) c1
WHERE row_num = 1;
```
这将返回每个案件号和负责人的最早日期,但是请注意不是所有SQL方言都支持窗口函数。
阅读全文