iT邦幫忙

0

(更新)對資料表內的每個會員做的時間排序取最新2筆

按成發文!!!還在想怎麼沒有人回復問題QQ

這邊使用sql-server語法
資料庫內有張表 內有欄位 id(流水編號) num(會員編號) date(日期時間)
需要依照會員大小排序後 再取每個會員最大時間的兩筆資料
原本

id    num    date
1     A1     201703
2     B1     201608
3     A1     202104
4     C1     202006
5     A1     201610
6     B1     201703
.
.

希望變成(id只是示意,不是一定要這樣)
後取每個 num 的date最新的前2筆資料

id    num    date    取
3     A1     202104  v
1     A1     201703  v
5     A1     201610
6     B1     201703  v
2     B1     201608  v
4     C1     201606  v(對C1只有這筆最新所以也要取)
.
.

目前已經做到可以將同一位會員排在一起,但就是無法順利排日期
加過ORDER BY 也不是
之後取每個會員日期最新2筆資料
只知道max可以取最大TOP取前幾筆資料,但不知道要怎麼取每個會員的前兩筆資料

先謝謝各位幫助

  SELECT * FROM
    (SELECT ROW_NUMBER()
		OVER(
			ORDER BY MF_Num ASC
		)AS MF_Nums, CONVERT( date, StartTime + '01')AS sDate,* FROM [tableName])AS aTable

https://ithelp.ithome.com.tw/upload/images/20210716/20120558YGHscztgzQ.png

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

1 個回答

1
rogeryao
iT邦大師 1 級 ‧ 2021-07-17 13:51:42
最佳解答
CREATE TABLE T (
id int,
num nvarchar(20),
xdate nvarchar(20));
 
INSERT INTO T
VALUES
(1,'A1','201703'),
(2,'B1','201608'),
(3,'A1','202104'),
(4,'C1','202006'),
(5,'A1','201610'),
(6,'B1','201703');
SELECT id,num,xdate
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY num ORDER BY xdate DESC) AS NO,*
FROM T
) AS K 
WHERE NO<=2

Demo

我要發表回答

立即登入回答