簡體   English   中英

SQL 服務器:來自子查詢的最大值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM