Reputation: 497
I'm inputting the following query using MySql 5.5.62 to creating a sequence column with ORDER BY using MySql 5.5.62
What I'm trying to achieve is to by adding a sequence column that I can sort my results on instead of sorting on multiple columns. It's based on an ORDER BY clause involving 1 column.
UPDATE `dotable` t
JOIN (
SELECT
( @rn := @rn + 1 ) AS pPrio,
pDateHH,
sID
FROM
`dotable`,
( SELECT @rn := 0 ) AS x
ORDER BY
pDateHH ASC
) q ON t.sID = q.sID
SET t.pPrio = q.pPrio
WHERE DATE(t.pDateHH) = DATE_SUB(CURRENT_DATE,INTERVAL 1 DAY);
I need this result
+-------+---------------------+
| pPrio | pDateHH |
+-------+---------------------+
| 1 | 2021-09-16 18:40:02 |
| 2 | 2021-09-16 19:00:20 |
| 3 | 2021-09-16 19:20:47 |
| 4 | 2021-09-16 20:00:59 |
| 5 | 2021-09-16 20:01:48 |
| 6 | 2021-09-16 20:20:31 |
| 7 | 2021-09-16 20:40:05 |
| 8 | 2021-09-16 21:17:27 |
| 9 | 2021-09-16 21:20:03 |
| 10 | 2021-09-16 21:40:24 |
| 11 | 2021-09-16 22:00:09 |
| 12 | 2021-09-16 22:38:03 |
| 13 | 2021-09-16 22:40:03 |
| 14 | 2021-09-16 23:02:25 |
| 15 | 2021-09-16 23:20:02 |
| 16 | 2021-09-16 23:58:58 |
| 1 | 2021-09-17 00:00:06 |
| 2 | 2021-09-17 00:22:53 |
| 3 | 2021-09-17 00:40:05 |
| 4 | 2021-09-17 01:00:44 |
| 5 | 2021-09-17 01:20:04 |
+-------+---------------------+
Instead of
+-------+---------------------+
| pPrio | pDateHH |
+-------+---------------------+
| 1 | 2021-09-16 18:40:02 |
| 2 | 2021-09-16 19:00:20 |
| 3 | 2021-09-16 19:20:47 |
| 4 | 2021-09-16 20:00:59 |
| 5 | 2021-09-16 20:01:48 |
| 6 | 2021-09-16 20:20:31 |
| 7 | 2021-09-16 20:40:05 |
| 8 | 2021-09-16 21:17:27 |
| 9 | 2021-09-16 21:20:03 |
| 10 | 2021-09-16 21:40:24 |
| 11 | 2021-09-16 22:00:09 |
| 12 | 2021-09-16 22:38:03 |
| 13 | 2021-09-16 22:40:03 |
| 14 | 2021-09-16 23:02:25 |
| 15 | 2021-09-16 23:20:02 |
| 16 | 2021-09-16 23:58:58 |
| 17 | 2021-09-17 00:00:06 |
| 18 | 2021-09-17 00:22:53 |
| 19 | 2021-09-17 00:40:05 |
| 20 | 2021-09-17 01:00:44 |
| 21 | 2021-09-17 01:20:04 |
+-------+---------------------+
Any suggestion?
My table structure and the update query below on db-fiddle.com, which offers MySQL 5
Upvotes: 0
Views: 130
Reputation: 3467
As row_number() does not support lower version so alternative use of row_number in below query. As compare with date so consider a default date.
-- MySQL(5.5 & 5.6)
UPDATE dotable d
JOIN (SELECT @row_no:=CASE WHEN @db_names=DATE(d.pDateHH) THEN @row_no+1 ELSE 1 END AS row_number
, @db_names:= DATE(d.pDateHH) date_val
, d.pDateHH
, d.sID
FROM dotable d,
(SELECT @row_no := 0,@db_names:='1900-01-01') x
ORDER BY DATE(d.pDateHH)) p
ON d.sID = p.sID
SET d.pPrio = p.row_number
WHERE DATE(d.pDateHH) = DATE_SUB(CURRENT_DATE,INTERVAL 1 DAY);
Please check from url https://dbfiddle.uk/?rdbms=mysql_5.6&fiddle=f9def1b6a12976bbceb30a6984726ead
Upvotes: 1