编辑:
我删除了结尾处令人困惑的言论,并添加了一个我认为不相关的附加列pl_id(由于我明显缺乏对group by
的理解)。在尝试发布建议时,我遇到了一个问题,即引入MAX / Group By会导致
| name | license_plate | pl_id | start_date |
| aaron | AA-AA-22 | 3 | 2016-1-1 |
我期望的地方:
| name | license_plate | pl_id | start_date |
| aaron | AA-AA-22 | 4 | 2016-1-1 |
因此,以某种方式将牌照AA-AA-22的最大日期(2016-1-1)显示在pl_id = 3的记录中,为什么结果返回记录的日期是pl_id 4?
结束编辑
我有一个带有列的表:
名称
牌照
开始日期
我需要一个查询,该查询为每个车牌恰好返回最大start_date或start_date为空的一条记录。但是空的开始日期应优先于最大开始日期。
每个车牌保证最多包含一个start_date = null的条目,但可以包含多个带有有效“ start_date” -s的条目。
因此,例如,在下表上执行时:
| name | license_plate | pl_id | start_date |
| aaron | AA-AA-11 | 1 | 2015-1-1 |
| aaron | AA-AA-11 | 2 | null |
| aaron | AA-AA-22 | 3 | 2015-1-1 |
| aaron | AA-AA-22 | 4 | 2016-1-1 |
| bill | BB-BB-11 | 5 | 2015-1-1 |
| bill | BB-BB-11 | 6 | null |
| bill | BB-BB-22 | 7 | 2015-1-1 |
| clark | CC-CC-11 | 8 | 2015-1-1 |
| clark | CC-CC-11 | 9 | 2016-1-1 |
| dave | DD-DD-11 | 10 | 2014-1-1 |
| dave | DD-DD-11 | 11 | 2015-1-1 |
| dave | DD-DD-11 | 12 | 2016-1-1 |
| eddy | EE-EE-11 | 13 | null |
查询应返回:
| name | license_plate | pl_id | start_date |
| aaron | AA-AA-11 | 2 | null |
| aaron | AA-AA-22 | 4 | 2016-1-1 |
| bill | BB-BB-11 | 6 | null |
| bill | BB-BB-22 | 7 | 2015-1-1 |
| clark | CC-CC-11 | 9 | 2016-1-1 |
| dave | DD-DD-11 | 12 | 2016-1-1 |
| eddy | EE-EE-11 | 13 | null |
最佳答案
SELECT name, license_plate, IF(max(IF(start_date IS NULL, '2099-01-01', start_date)) = '2099-01-01', null, max(start_date))
FROM table
GROUP BY name, license_plate;
如果需要,可以将“ 2099-01-01”更改为更大的数字。
在您的数据集上进行了测试。