GROUP BY
、ORDER BY
、HAVING
のレコードを取得しようとしていますが、結果が得られません。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 |
+--------------------------------------+-----+---------------------+------+
そして、私はこのような何かなりたい::これは私のテーブルtest
である私は同じno
に属し、最古の一つでありますレコードだけを取得したい。ここ
+--------------------------------------+-----+----------+
| id | no | COUNT(*) |
+--------------------------------------+-----+----------+
| 5dd46d35-358a-314e-30fa-57e4d2ca92ad | 104 | 3 |
| db77b687-763d-b63a-be77-57e4d2e246fb | 105 | 3 |
+--------------------------------------+-----+----------+
を。また、このクエリは、複数のレコードが同じ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;
しかし、このクエリを実行した後、私は何も得ていない。親切に私をここで案内します。このアプローチにはいくつかの制限があります
SELECT SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY date_entered DESC), ',', 1) as id,
no, COUNT(*)
FROM test
GROUP BY no
HAVING COUNT(*) > 1 ;
:
ありがとう@Gorden、それは働いた。しかし、与えられた数には多くのidsがあり、前述したように、 'GROUP_CONCAT()'の内部サイズを再設定する必要があります。私は知っているかもしれません、合併症は何ですか?また、クエリを少し説明すれば、大部分は 'substring_index()/ group_concat()'と言っても大いに役立ちます。ありがとうございました。 –
'group_concat()'はすべてのIDを日付順に長い文字列の順番にします。 'substring_index()'は最初のものを引き出します。 –
こんにちは@GordonLinoff、このクエリをSQL Server 2008に移植する方法はありますか? –