我想要结合GROUP BY
,ORDER BY
和HAVING
来获取记录,但我没有得到结果/可取的结果。这是我的表test
:使用GROUP BY,ORDER BY和HAVING得不到结果
+--------------------------------------+-----+---------------------+------+
| id | no | date_entered | name |
+--------------------------------------+-----+----------------------------+
| c44d1977-0193-a2f1-00f9-57e4c53ba416 | 104 | 2016-09-23 06:02:16 | Z-44 |
| ca1879a2-df08-4fe3-b144-57e4d2ab0c62 | 104 | 2016-09-23 06:57:35 | Z-44 |
| 5dd46d35-358a-314e-30fa-57e4d2ca92ad | 104 | 2016-09-23 06:59:17 | Z-44 |
| d474cc6a-e7a1-15d1-d209-57e4c5aa607d | 105 | 2016-09-23 05:03:08 | Z-45 |
| db77b687-763d-b63a-be77-57e4d2e246fb | 105 | 2016-09-23 05:51:41 | Z-45 |
| 70f0f514-c0fd-ddfd-55a6-57e4d21b5e3c | 106 | 2016-09-23 05:29:39 | Z-46 |
+--------------------------------------+-----+---------------------+------+
而且我想结果是这样的:
+--------------------------------------+-----+----------+
| id | no | COUNT(*) |
+--------------------------------------+-----+----------+
| 5dd46d35-358a-314e-30fa-57e4d2ca92ad | 104 | 3 |
| db77b687-763d-b63a-be77-57e4d2e246fb | 105 | 3 |
+--------------------------------------+-----+----------+
在这里,我想只获取那些属于同一no
且历史最悠久的一个记录。此外,此查询应该在有多个记录属于同一个no
的情况下运行。所以这是我使用
SELECT id, no, COUNT(*)
FROM test
GROUP BY no
HAVING COUNT(*) > 1
ORDER BY date_entered DESC;
查询,但我得到这个结果
+--------------------------------------+-----+----------+
| id | no | COUNT(*) |
+--------------------------------------+-----+----------+
| c44d1977-0193-a2f1-00f9-57e4c53ba416 | 104 | 3 |
| d474cc6a-e7a1-15d1-d209-57e4c5aa607d | 105 | 3 |
+--------------------------------------+-----+----------+
现在,我到处寻找帮助,我得到这个How to combine GROUP BY, ORDER BY and HAVING并作为公认的答案提到However, you need to pick the fields you ACTUALLY WANT then select only those and group by them
,所以我也试过这个查询:
SELECT id, no, count(*)
FROM test
GROUP BY id, no
HAVING count(*) > 1
ORDER BY date_entered DESC;
但执行此查询后,我没有。请在这里指导我。
Thanks @Gorden,它工作。但是对于给定的数字,将会有许多ID,并且如您所述,需要重新配置GROUP_CONCAT()的内部大小。我可否知道,会有什么并发症?另外,如果你稍微解释一下你的查询,主要是'substring_index()/ group_concat()',那对我来说会很有帮助。谢谢。 –
'group_concat()'在日期之前把所有的id都变成一个长字符串顺序。 'substring_index()'拉出第一个。 –
嘿@GordonLinoff,你有什么想法如何将此查询移植到SQL SERVER 2008? –