簡體   English   中英

如何按查詢順序獲取n條最高記錄

[英]How to take n top records in order by query

我正在使用以下查詢來檢索交易,但每個用戶只需要前2條記錄

SELECT  bt.FromID, bt.ToID, u.Username, bt.Amount, bt.ToOpeningBal, bt.ToClosingBal, bt.CreatedDate AS TransferDate, u.CreatedDate AS RETLCreatedDate
FROM   BalanceTransfer AS bt INNER JOIN Users AS u ON bt.ToID = u.ID
WHERE  u.CreatedDate BETWEEN '2017-01-04 00:00:14.1400000' AND '2017-01-10 00:00:14.1400000'
AND ( bt.ToOpeningbal = 0 or bt.ToOpeningbal = 200)
ORDER BY bt.CreatedDate



Username  | Amount |    ToOpeningBal|   ToClosingBal |  TransferDate
----------|--------|----------------|----------------|----------------
ABC       |   2044 |   0            |  2044          | 2/18/17 11:00 AM
ABC       |   2000 |   0            |  2000          | 2/18/17 11:28 AM
ABC       |   5110 |  200           |  5310          | 2/20/17 4:52 PM
ABC       |   3066 |   0            |  3066          | 2/18/17 12:48 PM
ABC       |   3069 |   0            |  3069          | 2/21/17 7:38 PM
XYZ       |   2050 |   0            |  2050          | 2/18/17 2:23 PM
XYZ       |   2050 |   0            |  2050          | 2/18/17 3:00 PM
XYZ       |   2044 |   0            |  2044          | 2/18/17 12:34 PM
XYZ       |   5125 |   0            |  5125          | 2/18/17 8:39 PM

對於以上結果,我只需要每個用戶名的前2條記錄

如果使用SQL Server,請添加row_number並使用該過濾器:

SELECT * FROM (
SELECT  
    bt.FromID, 
    bt.ToID, 
    u.Username, 
    bt.Amount, 
    bt.ToOpeningBal, 
    bt.ToClosingBal, 
    bt.CreatedDate AS TransferDate, 
    u.CreatedDate AS RETLCreatedDate,
    ROW_NUMBER() OVER(PARTITION BY u.Username ORDER BY bt.CreatedDate) rowNum
FROM   BalanceTransfer AS bt 
   INNER JOIN Users AS u ON bt.ToID = u.ID
WHERE u.CreatedDate BETWEEN '2017-01-04 00:00:14.1400000' AND '2017-01-10 00:00:14.1400000'
    AND (bt.ToOpeningbal = 0 or bt.ToOpeningbal = 200)
ORDER BY bt.CreatedDate) a
WHERE rowNum <=2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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