(柱)没有返回我其他列的正确数据(min(column) is not returning me c

2019-07-29 21:04发布

下面是我有什么

+++++++++++++++++++++++++++
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'
+++++++++++++++++++++++++++

我使用的查询

SELECT id, min(myDate) as Date, name 
FROM myTable
GROUP BY id;

我下面让输出

+++++++++++++++++++++++++++
id + myDate       + name
+++++++++++++++++++++++++++
'A'+ '2012-06-04' + 'baz'
'B'+ '2012-06-05' + 'foo'
'C'+ '2012-06-04' + 'bla'
+++++++++++++++++++++++++++

我的问题是,当查询是给我正确的日期,为什么列的数据name巴兹 ,而不是酒吧即将到来的name日期2012-06-04

演示测试数据。

Answer 1:

你抢

  1. 的ID,
  2. 最低日该ID,并
  3. 任何与之相伴的名字。

其他(正常)数据库甚至不允许这个查询。 他们会强迫你要么使用聚合函数的名称 ,或添加名字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)

要么:

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


Answer 2:

你必须使用一个不同的查询,如指出的DevArt:

SELECT m.* from myTable m join
(select id, min(myDate) md from myTable group by id) mm
on m.id=mm.id and m.myDate=md

现有查询不指定上的名字列上的约束,这就是为什么你没有得到你期待的结果的原因。 Group by只会使一组,你可以从中取值,使用类似功能min ,或随机如果像你一样你不指定任何东西。



Answer 3:

为了您的具体问题,所有u需要做的是应用MIN功能级联场:

SELECT id, min(CONCAT(myDate,' ++ ',name)) as date_name 
FROM myTable
GROUP BY id;

并处理它在你的服务器端脚本


您正在使用GROPU BY。 这意味着在结果每一行代表一值。 其中一个值是组名(你按分组字段的值)。 其余的是从该组中的任意值。
例如,下面的表中:

F1   |   F2
1         aa
1         bb
1         cc
2         gg
2         hh

如果妳将F1组: SELECT F1,F2 from T GROUP BY F1你会得到两行:

1    and one value from (aa,bb,cc)
2    and one value from (gg,hh)

如果想要可确定性的结果集,你需要告诉应用到组什么度算法的软件。 一些例如:

  1. MIN
  2. MAX
  3. 计数

等等等等。

在你的情况下,U不适用确定性度算法的name领域,使u得到来自设备的“随机”的结果。



文章来源: min(column) is not returning me correct data of other columns
标签: mysql min