반응형
MySQL/MariaDB 업데이트 카운터 그룹 기준
업데이트 방법number
1,2,3,4,...를 카운트하도록 열을 표시한 후 다른 열이 있을 때 1에서 다시 시작됩니다.booking_id
변화?
제가 지금까지 알아낸 것은 다음과 같습니다.
SET @pos := 0;
SET @last := 0;
UPDATE booking_segments
SET number = (SELECT @pos := if(booking_id = @last, @pos + 1, 1)), @last := booking_id
where 1
ORDER BY booking_id, pickup_time_utc;
저는 이런 것이 효과가 있어야 한다고 생각합니다만, 저는 그것을 어떻게 회피해야 할지 모르겠습니다.@last := booking_id
구문 오류를 만들지 않고 비트를 입력합니다.MySQL과 JS와 같은 쉼표 연산자라면 할 수 있지만 내부에서 어떤 것이 더 유효할지 모르겠습니다.SET
블록으로 막다
뭔가 알아냈는데, 이보다 덜 게토적인 방법이 있을까요?
SET @pos := 0;
SET @last := 0;
UPDATE booking_segments
SET number = @tmp := (SELECT @pos := if(booking_id = @last, @pos + 1, 1)),
number = @last := booking_id,
number = @tmp
where 1
ORDER BY booking_id,pickup_time_utc ;
이것을 상상하는 데 문제가 있다면 다음과 같은 결과가 있습니다.
+----+------------+--------+---------------------+
| id | booking_id | number | pickup_time_utc |
+----+------------+--------+---------------------+
| 3 | 2 | 1 | 2015-02-22 18:00:00 |
+----+------------+--------+---------------------+
| 7 | 2 | 2 | 2015-02-23 04:00:00 |
+----+------------+--------+---------------------+
| 8 | 5 | 1 | 2015-06-06 21:00:00 |
+----+------------+--------+---------------------+
| 9 | 5 | 2 | 2015-06-07 08:15:00 |
+----+------------+--------+---------------------+
| 10 | 6 | 1 | 2015-04-11 15:00:00 |
+----+------------+--------+---------------------+
| 11 | 6 | 2 | 2015-04-12 05:30:00 |
+----+------------+--------+---------------------+
| 16 | 8 | 1 | 2015-07-28 08:20:00 |
+----+------------+--------+---------------------+
| 17 | 8 | 2 | 2015-07-28 10:00:00 |
+----+------------+--------+---------------------+
| 18 | 9 | 1 | 2015-07-01 15:50:00 |
+----+------------+--------+---------------------+
| 19 | 10 | 1 | 2015-09-13 06:00:00 |
+----+------------+--------+---------------------+
| 20 | 11 | 1 | 2015-08-01 23:30:00 |
+----+------------+--------+---------------------+
| 21 | 11 | 2 | 2015-08-02 07:00:00 |
+----+------------+--------+---------------------+
| 22 | 12 | 1 | 2015-08-08 20:00:00 |
+----+------------+--------+---------------------+
| 23 | 13 | 1 | 2015-09-05 21:00:00 |
+----+------------+--------+---------------------+
| 24 | 14 | 1 | 2015-09-19 20:30:00 |
+----+------------+--------+---------------------+
| 25 | 15 | 1 | 2015-08-29 21:15:00 |
+----+------------+--------+---------------------+
| 26 | 16 | 1 | 2015-09-10 03:15:00 |
+----+------------+--------+---------------------+
| 37 | 16 | 2 | 2015-09-10 08:00:00 |
+----+------------+--------+---------------------+
| 28 | 17 | 1 | 2015-08-12 22:00:00 |
+----+------------+--------+---------------------+
| 29 | 18 | 1 | 2015-08-11 08:00:00 |
+----+------------+--------+---------------------+
| 30 | 19 | 1 | 2015-08-15 21:00:00 |
+----+------------+--------+---------------------+
| 32 | 20 | 1 | 2016-06-09 09:05:00 |
+----+------------+--------+---------------------+
| 31 | 20 | 2 | 2016-06-10 12:00:00 |
+----+------------+--------+---------------------+
| 33 | 21 | 1 | 2015-09-10 05:00:00 |
+----+------------+--------+---------------------+
| 34 | 22 | 1 | 2015-09-10 02:00:00 |
+----+------------+--------+---------------------+
| 35 | 22 | 2 | 2015-09-10 04:00:00 |
+----+------------+--------+---------------------+
| 36 | 22 | 3 | 2015-09-10 06:45:00 |
+----+------------+--------+---------------------+
| 38 | 23 | 1 | 2015-09-10 04:00:00 |
+----+------------+--------+---------------------+
| 39 | 23 | 2 | 2015-09-10 09:45:00 |
+----+------------+--------+---------------------+
| 40 | 24 | 1 | 2015-09-10 04:30:00 |
+----+------------+--------+---------------------+
| 41 | 24 | 2 | 2015-09-10 06:45:00 |
+----+------------+--------+---------------------+
| 67 | 38 | 1 | 2016-01-02 16:20:00 |
+----+------------+--------+---------------------+
| 68 | 38 | 2 | 2016-01-03 07:00:00 |
+----+------------+--------+---------------------+
| 69 | 38 | 3 | 2016-01-03 10:00:00 |
+----+------------+--------+---------------------+
현재 사용하고 있는 버전은 10.1.14-MariaDB입니다.
MariaDB는 버전 10.2부터 Window/Analytic 기능을 지원하기 시작했으므로 업그레이드가 가능하면 기능을 활용할 수 있습니다.
파생 테이블에서, 우리는 먼저 모든 행에 대한 "행 번호"를 다음의 파티션에서 가져올 수 있습니다.booking_id
가 주문한.pickup_time_utc
오름차순으로그런 다음 메인 테이블로 다시 연결하여 업데이트할 수 있습니다.number
기둥.쿼리는 단순히 다음과 같습니다.
UPDATE booking_segments AS bs
JOIN (SELECT id,
Row_number()
OVER (
partition BY booking_id
ORDER BY pickup_time_utc ASC) AS rn
FROM booking_segments) AS dt
ON dt.id = bs.id
SET bs.number = dt.rn
언급URL : https://stackoverflow.com/questions/57602647/mysql-mariadb-update-counter-group-by
반응형
'source' 카테고리의 다른 글
차체에 새 필드 추가 예외 스프링 받침대 (0) | 2023.07.30 |
---|---|
히스토그램 산점도 행렬 lib (0) | 2023.07.25 |
Panda에서 날짜/시간 형식을 변경하는 방법 (0) | 2023.07.25 |
mysql: 두 날짜-시간 사이의 레코드 수 가져오기 (0) | 2023.07.25 |
jQuery AJAX 응답 구문 분석 중 (0) | 2023.07.25 |