DB選擇最新的記錄:mysql的如何從表
我有以下記錄表(tblSomething):
現在我需要通過選擇最新的過濾這個記錄來自此表的唯一記錄。
的結果應該是:
在第二圖象的喬和麗娜與2015年11月16日不可用。
你能告訴我如何編寫一個查詢來實現這一點。
DB選擇最新的記錄:mysql的如何從表
我有以下記錄表(tblSomething):
現在我需要通過選擇最新的過濾這個記錄來自此表的唯一記錄。
的結果應該是:
在第二圖象的喬和麗娜與2015年11月16日不可用。
你能告訴我如何編寫一個查詢來實現這一點。
嘗試以下查詢:
SELECT t1.ID1, t1.ID2, t1.Name1, t1.Name2, t1.date
FROM tblSomething t1
INNER JOIN
(
SELECT ID1, ID2, MAX(date) AS date
FROM tblSomething
GROUP BY ID1, ID2
) t2
ON t1.ID1 = t2.ID1 AND t1.ID2 = t2.ID2 AND t1.date = t2.date
內查詢確定,對於每個ID1
/ID2
對,最近的日期。然後在整個tlbSomething
表上的查詢受到限制,只保留那些具有對於每個ID1
/ID2
對最近日期的記錄。
點擊下面的鏈接,查看使用OP的樣本數據進行的演示。
加上一個簡單的解決方案和解釋。 – DarkKnight
不錯的解決方案,如果它有更多的領域,你將如何處理這個問題,看到更新的問題。 – yogeshkmrsoni
@yogeshkmrsoni嘗試一下小提琴。輸出與您在OP中向我們展示的內容相符。 –
使用MAX
或str_to_date
SELECT *
FROM table t1
WHERE str_to_date(t1.date,'%m/%d/%Y')=(SELECT MAX(str_to_date(t2.date,'%m/%d/%Y'))
FROM table t2
WHERE t1.ID2 = t2.ID2)
試試這個:
select t.username, t.date, t.value from MyTable t inner join ( select username, max(date) as MaxDate from MyTable group by username ) tm on t.username = tm.username and t.date = tm.MaxDate
參考:how do I query sql for a latest record date for each user
CREATE TABLE #tblSomething
(ID1 int, ID2 int, Name1 varchar(55), Name2 varchar(55), date1 date, cost int, days int, somefield int);
INSERT INTO #tblSomething
(ID1, ID2, Name1, Name2, date1, cost, days, somefield)
VALUES
(330, 435, 'sn1', 'hello1', '2015-11-17', 500, 12, 34),
(404, 467, 'joe', 'rina', '2015-11-23', 600, 23, 22),
(404, 467, 'joe', 'rina', '2015-11-16', 700, 11, 123),
(404, 468, 'joe', 'tina', '2015-11-23', 800, 23, 41),
(404, 468, 'joe', 'tina', '2015-11-16', 789, 11, 43);
試試這個
with res as (select *,ROW_NUMBER() over(partition by ID1, ID2, Name1, Name2 order by ID1, ID2, Name1, Name2) as rn from #tblSomething)
select ID1, ID2, Name1, Name2, date1, cost, days, somefield from res where rn=1
輸出
MySQL或SQL服務器?不能兼得。 – DarkKnight
@DarkKnight事實上,如果我們給出一個純粹的ANSI-92查詢作爲答案,它就可以同時存在。但是,他應該適當地標註。 –
爲什麼記錄'404 468 joe tina'在結果集中出現兩次? 「11/16/2015」記錄是否應該不被查詢過濾掉? –