반응형
MySQL 각 고유 값의 첫 번째 항목에서 행을 선택합니다.
다음과 같은 표가 있다고 가정합니다(여기 관심 열은cid
):
+-----+-------+-------+-------+---------------------+--------------+
| cid | pid | rid | clink | time | snippet |
+-----+-------+-------+-------+---------------------+--------------+
| 155 | 11222 | 1499 | 1137 | 2012-08-22 03:05:06 | hi |
| 138 | 11222 | 241 | 1136 | 2012-08-21 05:25:00 | again |
| 138 | 11222 | 241 | 1135 | 2012-08-21 05:16:40 | hi |
| 155 | 11222 | 1499 | 1134 | 2012-08-21 05:11:00 | hi cute |
| 140 | 11222 | 11223 | 1133 | 2012-08-21 05:05:18 | hi |
| 154 | 11222 | 565 | 1132 | 2012-08-21 05:04:47 | 7 |
| 153 | 11222 | 272 | 1131 | 2012-08-21 05:04:41 | 6 |
| 146 | 11222 | 362 | 1130 | 2012-08-21 05:04:33 | 5 |
| 152 | 11222 | 364 | 1129 | 2012-08-21 05:04:27 | 4 |
| 151 | 11222 | 390 | 1128 | 2012-08-21 05:04:22 | 3 |
| 150 | 11222 | 333 | 1127 | 2012-08-21 05:04:16 | 2 |
| 148 | 11222 | 268 | 1126 | 2012-08-21 05:04:10 | 1 |
| 140 | 11222 | 11223 | 1125 | 2012-08-21 04:59:57 | hi sir |
| 147 | 11222 | 283 | 1123 | 2012-08-21 03:29:55 | yo |
| 140 | 11222 | 11223 | 1121 | 2012-08-21 02:12:13 | hello! |
| 139 | 11222 | 249 | 1120 | 2012-08-21 02:11:53 | hi :) |
| 140 | 11222 | 11223 | 1119 | 2012-08-21 02:11:26 | hi :) |
| 140 | 11222 | 11223 | 1118 | 2012-08-21 02:11:08 | hi too |
| 139 | 11222 | 249 | 1117 | 2012-08-21 02:11:00 | :P |
| 139 | 11222 | 249 | 1116 | 2012-08-21 02:10:57 | hi |
| 139 | 11222 | 249 | 1115 | 2012-08-21 02:10:51 | helo |
| 139 | 11222 | 249 | 1114 | 2012-08-21 02:06:19 | hi |
| 139 | 11222 | 249 | 1113 | 2012-08-21 02:05:45 | hi baby |
| 139 | 11222 | 249 | 1112 | 2012-08-21 02:05:00 | hi |
| 139 | 11222 | 249 | 1111 | 2012-08-21 02:04:41 | hi |
| 140 | 11222 | 11223 | 1110 | 2012-08-21 02:04:26 | hi |
| 140 | 11222 | 11223 | 1108 | 2012-08-21 01:47:40 | hey :) |
| 139 | 11222 | 249 | 1107 | 2012-08-21 01:44:43 | hi |
| 138 | 11222 | 241 | 1106 | 2012-08-21 01:44:11 | hi |
| 138 | 11222 | 241 | 1105 | 2012-08-21 01:09:20 | conv 1 msg 1 |
+-----+-------+-------+-------+---------------------+--------------+
각 항목의 첫 번째 항목만 추출하는 방법cid
? 결과 표는 다음과 같습니다.
+-----+-------+-------+-------+---------------------+--------------+
| cid | pid | rid | clink | time | snippet |
+-----+-------+-------+-------+---------------------+--------------+
| 155 | 11222 | 1499 | 1137 | 2012-08-22 03:05:06 | hi |
| 138 | 11222 | 241 | 1136 | 2012-08-21 05:25:00 | again |
| 140 | 11222 | 11223 | 1133 | 2012-08-21 05:05:18 | hi |
| 154 | 11222 | 565 | 1132 | 2012-08-21 05:04:47 | 7 |
| 153 | 11222 | 272 | 1131 | 2012-08-21 05:04:41 | 6 |
| 146 | 11222 | 362 | 1130 | 2012-08-21 05:04:33 | 5 |
| 152 | 11222 | 364 | 1129 | 2012-08-21 05:04:27 | 4 |
| 151 | 11222 | 390 | 1128 | 2012-08-21 05:04:22 | 3 |
| 150 | 11222 | 333 | 1127 | 2012-08-21 05:04:16 | 2 |
| 148 | 11222 | 268 | 1126 | 2012-08-21 05:04:10 | 1 |
| 147 | 11222 | 283 | 1123 | 2012-08-21 03:29:55 | yo |
| 140 | 11222 | 11223 | 1121 | 2012-08-21 02:12:13 | hello! |
| 139 | 11222 | 249 | 1120 | 2012-08-21 02:11:53 | hi :) |
+-----+-------+-------+-------+---------------------+--------------+
mysql에는 다음과 같은 "유효"가 있습니다.
select *
from mytable
group by cid;
mysql에서는 그룹화되지 않은 컬럼을 집약할 수 없기 때문에(다른 데이터베이스는 구문 오류를 발생시킵니다), 이 경우 각 그룹화 기준 값의 첫 번째 항목만 출력합니다.단, 이것이 "첫 번째" 오카렌스를 결정하는 방법을 보장하는 것은 아닙니다(행 읽기 방법만 해당).
특정 첫 번째 항목을 원하는 경우 먼저 정렬한 다음 그룹별 치트를 적용합니다.
select *
from (
-- order by the "time" column descending to get the "most recent" row
select * from mytable order by time desc
) x
group by cid
이거 드셔보세요.
SELECT *
FROM tableName a
INNER JOIN (
SELECT cid, MIN(`time`) AS MinTime
FROM tableName
GROUP BY cid
) b
ON a.CID = B.cid AND a.time = b.MinTime
MySQL 8에서는 이를 위해 창 기능을 사용합니다.
SELECT cid, pid, rid, clink, time, snippet
FROM (
SELECT t.*, ROW_NUMBER() OVER (PARTITION BY cid ORDER BY time) rn
FROM t
) t
WHERE rn = 1
필터링 조인을 사용할 수 있습니다.
select *
from (
select cid
, min(time) as min_time
from YourTable
group by
cid
) filter
join YourTable yt
on filter.cid = yt.cid
and filter.min_time = yt.time
오래된 스레드인 것을 알고 있습니다.허용된 솔루션에서는 두 번 이상 발생한 열만 검색됩니다.
이 방법은 효과가 있었습니다.
SELECT cid, pid, rid, clink, MAX(time), snippet
FROM mytable
GROUP BY cid
언급URL : https://stackoverflow.com/questions/12065931/mysql-select-rows-on-first-occurrence-of-each-unique-value
반응형
'source' 카테고리의 다른 글
모키토 슈퍼클래스의 메서드 호출만을 조롱하는 방법 (0) | 2022.12.24 |
---|---|
Vuex 게터 파괴 (0) | 2022.12.24 |
PHPMyAdmin 언어 설정 (0) | 2022.12.24 |
문자열에서 문자열 오카렌스를 계산하는 방법 (0) | 2022.12.24 |
Scala(테스트)를 사용하여 인스턴스 오브 체크를 수행하는 방법 (0) | 2022.12.04 |