以下是我所拥有的
+++++++++++++++++++++++++++
id + myDate + name
+++++++++++++++++++++++++++
'A'+ '2012-06-05' + 'baz'
'A'+ '2012-06-04' + 'bar'
'B'+ '2012-06-05' + 'foo'
'C'+ '2012-06-05' + 'bla'
'C'+ '2012-06-04' + 'blah'
'C'+ '2012-06-06' + 'bleh'
+++++++++++++++++++++++++++
Run Code Online (Sandbox Code Playgroud)
我正在使用的查询是
SELECT id, min(myDate) as Date, name
FROM myTable
GROUP BY id;
Run Code Online (Sandbox Code Playgroud)
我得到的输出如下
+++++++++++++++++++++++++++
id + myDate + name
+++++++++++++++++++++++++++
'A'+ '2012-06-04' + 'baz'
'B'+ '2012-06-05' + 'foo'
'C'+ '2012-06-04' + 'bla'
+++++++++++++++++++++++++++
Run Code Online (Sandbox Code Playgroud)
我的问题是,当查询给我正确的日期时,为什么列的数据name将以baz而不是bar来name表示日期2012-06-04为bar.
演示测试数据.
你抓住了
其他(普通)数据库甚至不允许此查询.他们会强迫你要么使用聚合函数的名称,或添加名字的group by为好.相反,MySQL选择一个随机值,这就是你的问题.
要解决此问题,您的查询将变得更加复杂:
select
t.id,
t.mydate,
t.name
from
myTable t
where
t.mydate =
(select
min(td.mydate)
from
myTable td
where
td.id = t.id)
Run Code Online (Sandbox Code Playgroud)
要么:
select
t.id,
t.mydate as date,
t.name
from
myTable t
inner join
(select
td.id
min(td.mydate) as date
from
myTable td
group by
td.id) tx on tx.id = t.id and tx.date = t.mydate
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2019 次 |
| 最近记录: |