Edv*_*art 0 mysql group-by multiple-conditions
编辑:
我在最后删除了令人困惑的评论,并添加了一个额外的列pl_id我认为无关紧要(由于我明显缺乏对group by工作的理解).在尝试发布的建议时,我遇到了导致MAX/Group By导致的问题
| name | license_plate | pl_id | start_date |
| aaron | AA-AA-22 | 3 | 2016-1-1 |
Run Code Online (Sandbox Code Playgroud)
我期望的地方:
| name | license_plate | pl_id | start_date |
| aaron | AA-AA-22 | 4 | 2016-1-1 |
Run Code Online (Sandbox Code Playgroud)
因此,不知何故,车牌号AA-AA-22的最大日期,即2016-1-1,出现在pl_id = 3的记录中,为什么结果会返回带有pl_id 4日期的记录? 结束编辑
我有一个列表:
我需要一个查询,它为每个牌照返回一条记录,其最大值为start_date或start_date为空.但是空的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 |
Run Code Online (Sandbox Code Playgroud)
查询应该返回:
| 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 |
Run Code Online (Sandbox Code Playgroud)
小智 5
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;
Run Code Online (Sandbox Code Playgroud)
如果需要,您可以将'2099-01-01'更改为更大的数字.
在您的数据集上测试.
| 归档时间: |
|
| 查看次数: |
432 次 |
| 最近记录: |