iT邦幫忙

1

如何查詢SQL重複資料最新一筆

目前資料庫長這樣,有品名、開始日期、完成日期、階段 4個欄位

品名 開始日期 完成日期 階段
配電盤 2006-03-01 2006-03-15 1
配電盤 2006-03-15 2006-03-18 2
配電盤 2006-03-18 2006-03-20 3
發電機 2006-03-05 2006-03-10 1
發電機 2006-03-10 2006-03-12 2

想做去除重複品名,然後只取最大階段的一筆資料,該怎麼做?

品名 開始日期 完成日期 階段
配電盤 2006-03-18 2006-03-20 3
發電機 2006-03-10 2006-03-12 2
如果是 mysql 可以用

```
SELECT 品名, 開始日期, 完成日期, MAX(階段) FROM 資料表 GROUP BY 品名
```

但 SQL Server 就比較麻煩一點了,坐等高手回答
sibulun iT邦新手 5 級 ‧ 2021-03-08 08:56:51 檢舉
補充 : 是用 SQL Server =.=...
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

4
rogeryao
iT邦超人 8 級 ‧ 2021-03-08 08:54:40
最佳解答
CREATE TABLE TableX (
FA Nvarchar(20) NULL ,     -- 品名
FB Nvarchar(20) NULL,      -- 開始日期
FC Nvarchar(20) NULL,      -- 完成日期
FD Nvarchar(20) NULL);     -- 階段

INSERT INTO TableX (FA,FB,FC,FD)
VALUES 
(N'配電盤','2006-03-01','2006-03-15','1'),
(N'配電盤','2006-03-15','2006-03-18','2'),
(N'配電盤','2006-03-18','2006-03-20','3'),
(N'發電機','2006-03-05','2006-03-10','1'),
(N'發電機','2006-03-10','2006-03-12','2');
-- 方法一
SELECT FA AS '品名',FB AS '開始日期',FC AS '完成日期', FD AS '階段'
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY FA ORDER BY FD DESC) AS ROWNUM,*
FROM TableX) AS TempM
WHERE ROWNUM = 1
ORDER BY FA DESC
-- 方法二
SELECT TableX.FA AS '品名',TableX.FB AS '開始日期',TableX.FC AS '完成日期', TableX.FD AS '階段'
FROM TableX
INNER JOIN (
SELECT FA,MAX(FD) AS FD
FROM TableX
GROUP BY FA) AS Temp ON Temp.FA=TableX.FA AND Temp.FD=TableX.FD
ORDER BY TableX.FA DESC

Demo

sibulun iT邦新手 5 級 ‧ 2021-03-08 09:17:40 檢舉

謝謝哥 學習了

我要發表回答

立即登入回答