这样GROUP BY 使用方式是否正确?

WBOY
Libérer: 2016-06-06 20:29:13
original
1141 Les gens l'ont consulté

原题:

<code>SELECT * FROM table1 WHERE `id` IN (2,5,8);
假如我要查询ID为2,5,8的3条记录,我希望查到的数据分别是2,5,8为ID的最新的一条数据。这样的SQL应该如何写,谢谢~</code>
Copier après la connexion
Copier après la connexion

给出的答案有以下两种:

<code>1.
一般涉及到同标识多条记录查询最新的记录的问题,就应该有一个时间的字段,比如CREATE_TIME,我学到一个办法,大概就是结合使用order by查询最新,group by归纳成一条记录这种办法。

SELECT * FROM (
    SELECT * FROM table1 
    WHERE `id` IN (2, 5, 8)
    ORDER BY `create_time` DESC
    ) t
    GROUP BY t.`id`</code>
Copier après la connexion
Copier après la connexion
<code>2.
select t1.* from table1 as t1
right join (
  select id, max(createtime) as ctime from table1 group by id
) as t2 on t1.id=t2.id and t1.createtime=t2.ctime
where t2.id in (2,5,8)</code>
Copier après la connexion
Copier après la connexion

第一种没有聚合函数的情况下使用GROUP BY。
第二种有使用max()聚合函数
这两种得到的结果都是预期的。但是第一种这样使用是否是正确的,会产生错误的结果吗?

回复内容:

原题:

<code>SELECT * FROM table1 WHERE `id` IN (2,5,8);
假如我要查询ID为2,5,8的3条记录,我希望查到的数据分别是2,5,8为ID的最新的一条数据。这样的SQL应该如何写,谢谢~</code>
Copier après la connexion
Copier après la connexion

给出的答案有以下两种:

<code>1.
一般涉及到同标识多条记录查询最新的记录的问题,就应该有一个时间的字段,比如CREATE_TIME,我学到一个办法,大概就是结合使用order by查询最新,group by归纳成一条记录这种办法。

SELECT * FROM (
    SELECT * FROM table1 
    WHERE `id` IN (2, 5, 8)
    ORDER BY `create_time` DESC
    ) t
    GROUP BY t.`id`</code>
Copier après la connexion
Copier après la connexion
<code>2.
select t1.* from table1 as t1
right join (
  select id, max(createtime) as ctime from table1 group by id
) as t2 on t1.id=t2.id and t1.createtime=t2.ctime
where t2.id in (2,5,8)</code>
Copier après la connexion
Copier après la connexion

第一种没有聚合函数的情况下使用GROUP BY。
第二种有使用max()聚合函数
这两种得到的结果都是预期的。但是第一种这样使用是否是正确的,会产生错误的结果吗?

第一种是错误的. 按mysql 的说法, 返回的结果应该是此分组中 随机的一个. 执行的时候确实是 得到了预期的结果, 但mysql 不保证你 一定给你预期的结果.

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal