iT邦幫忙

0

mysql分組取第二筆資料

  • 分享至 

  • xImage

分組取第一筆可以用MAX / MIN + GROUP BY達成
但是取各組的第二筆要如何做呢?
我有在網路上查到這篇
https://notes.andywu.tw/2021/mysql-mariadb-%E5%8F%96%E5%BE%97%E6%AF%8F%E5%80%8Bgroup%E7%9A%84%E5%89%8Dn%E7%AD%86%E8%B3%87%E6%96%99/
但是實際測試發生問題
https://dbfiddle.uk/3eMFcW0D
第一次執行時,計數不會累加,要再執行一次才會累加
原因應該是我的mysql版本用的是5.7的關係,我改用8.0測試就沒有問題了
但是實際網站用的是5.7
請問有設定可以調整達成相同效果嗎?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
rogeryao
iT邦超人 7 級 ‧ 2023-03-28 23:10:03
最佳解答
CREATE TABLE `payment`
(`id` INT, `uid` INT, `currency` VARCHAR(3), `amount` INT);
DESCRIBE `payment`;
INSERT INTO `payment` (`id`,`uid`,`currency`,`amount`) VALUES
(1, 11, 'NTD', 800),
(2, 6, 'NTD', 590),
(3, 7, 'NTD', 1020),
(4, 55, 'USD', 24),
(5, 33, 'USD', 27),
(6, 2, 'USD', 25),
(7, 13, 'JPY', 3870),
(8, 10, 'JPY', 2980),
(9, 41, 'JPY', 3780);
select CC.id,CC.uid,CC.currency,CC.amount
from (
select AA.id,AA.uid,AA.amount,
@rowno := if(@grp = `currency`, @rowno + 1, 1) as idx,
@grp := `currency` as currency
from (select * from payment order by `currency`, amount DESC) AA
cross join (select @rowno := 0, @grp := null) BB) CC
where CC.idx = 2

Demo

迷路 iT邦新手 1 級 ‧ 2023-03-29 09:45:57 檢舉

成功了,非常感謝

我要發表回答

立即登入回答