抱歉我的英语不好。
我在考虑其序列的情况下尝试INSERT
一群INSERT INTO playlist_msg_tbl (playlist_id, sequence, msg_id)
SELECT
@newPlayListId, x.sequence, x.msg_id
FROM
playlist_msg_tbl
WHERE
playlist_id = @oldPlaylistId
。我会尝试解释你到底想要什么:
表格:订单
GROUP BY
我想要的是:
user_id
到目前为止我已尝试过:
+-----------+----------+------------+
| id | user_id | amount |
+-----------+----------+------------+
| 1 | 100 | 5 |
| 2 | 100 | 5 |
| 3 | 100 | 10 |
| 4 | 101 | 15 |
| 5 | 101 | 10 |
| 6 | 101 | 5 |
| 7 | 102 | 5 |
| 8 | 100 | 5 |
| 9 | 100 | 10 |
| 10 | 102 | 10 |
+-----------+----------+------------+
但它只是GROUP BY所有记录,无论其序列如何。
答案 0 :(得分:2)
MySQL没有排名或行号功能,这使得答案更复杂一些。要使用排名功能,请参阅此问题和答案:
http://stackoverflow.com/questions/1895110/row-number-in-mysql
一个可能的问题是:
SELECT
user_id,
count(*) as cnt,
sum(amount) as total_amount,
CONCAT_WS(',', min(id), max(id)) AS id_range
FROM (
SELECT
id,
id -
CASE
WHEN @prev_value = user_id THEN @rank_count := @rank_count + 1
WHEN @prev_value := user_id THEN @rank_count
END AS grp,
user_id,
amount
FROM
orders CROSS JOIN (SELECT @prev_value:=NULL, @rank_count:=0) r
ORDER BY
id
) s
GROUP BY grp
请参阅此fiddle。