[英]SQL Server : max value from sub query
請幫助我檢索最大值。 我創建了一些簡單的表格。 第一個是用戶,第二個是書籍。 所以我需要使用子查詢來檢索用戶使用日期最新的書籍名稱
以下是表格:
CREATE TABLE book_base
(
book_id int,
user_id int,
title VARCHAR(20),
date DATE,
);
CREATE TABLE users
(
userid int,
name VARCHAR(20),
);
INSERT INTO book_base (book_id, user_id, title, date)
VALUES ('221', 1, 'Just book', '2021-2-2'),
('222', 1, 'The book', '2020-4-8'),
('223', 1, 'My book', '2019-8-8'),
('228', 2, 'Nice book', '2021-1-2'),
('225', 2, 'Coole book', '2020-4-8'),
('226', 2, 'Super book', '2019-9-8');
INSERT INTO users (userid, name)
VALUES ('1', 'John Smith'),
('2', 'Mary Adams');
我試過這樣做
SELECT
userid AS [UID],
name AS [UserName],
bb.title, bb.date
FROM
users u
JOIN
(SELECT user_id title, MAX(date)
FROM book_base) bb ON u.userid = bb.user_id
結果應該只是日期為最大日期的行
試試這個,它基於您提供的數據:
SELECT *
FROM users u
JOIN (
select user_id,MAX(date) as DATE
from book_base GROUP BY user_id
) bb ON u.userid = bb.user_id
JOIN book_base b ON u.userid = b.user_id
AND bb.date = b.date
您可以將Cross Apply
與使用Top 1 With Ties
的子查詢一起使用。
Select u.userid As [UID], u.name As [UserName], bb.title, bb.date
From users u Cross Apply
(Select Top 1 With Ties user_id, title, date
From book_base
Where user_id=u.userid
Order by date Desc) As bb
使用相關子查詢按最大日期過濾
select b1.*, u.name
from book_base b1
join users u on u.userid = b1.user_id
where date = (select max(b2.date)
from book_base b2
where b2.user_id = b1.user_id)
Select * from (
SELECT
userid AS [UID],
[name] AS [UserName],
bb.title, Rank() OVER (Partition By bb.[user_id] order by bb.[date] desc) r,bb.[date]
FROM
users u inner join book_base bb ON u.userid = bb.[user_id]
) t
where r=1
看看有沒有幫助
如果您刪除外部 select 您會發現為什么會這樣,
Rank 是內置的 function,它通過首先將所有數據分組並按照給定的順序排列所有數據,然后您可以根據需要過濾結果,
例如 r=2 將提供第二個最近的日期。 並且 r=1 是每組的前 1 條記錄
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.