sqlserver查詢數據表中每個類別最新的一條記錄


表tariff_info, 原始數據:

 

想要的結果:以start_time時間倒序排序, 以code分類, 查詢每一類最新的一條記錄

sql:

SELECT
    a.*
FROM
    TARIFF_INFO a,
    (
        SELECT
            code,
            MAX (start_time) start_time
        FROM
            TARIFF_INFO
        GROUP BY
            code
    ) b
WHERE
    a.start_time = b.start_time
AND a.code = b.code
ORDER BY
    a.code

 這樣查詢結果已經實現了, 但是需要添加過濾條件, 即當前時間在start_time和end_time之間.  如果還用上面的sql僅僅在末尾追加一個條件發現查詢結果為空:

所以必須在子查詢中添加同樣的過濾條件方可查出正確結果, 如下面sql:

SELECT
    a.*
FROM
    TARIFF_INFO a,
    (
        SELECT
            code,
            MAX (start_time) start_time
        FROM
            TARIFF_INFO
        WHERE
            start_time <= '2018-09-18'
        GROUP BY
            code
    ) b
WHERE
    a.start_time = b.start_time
AND a.code = b.code
AND a.start_time <= '2018-09-18'
ORDER BY
    a.code

 

另:需要注意sql中時間區間的比較<=貌似有臨界日期會漏掉的情況, 這里不作贅述了.以下sql和上面的異曲同工:

SELECT
    a.*
FROM
    TARIFF_INFO a
INNER JOIN (
    SELECT
        code,
        MAX (start_time) 'start_time'
    FROM
        TARIFF_INFO
    WHERE CONVERT(VARCHAR(10),start_time,121) <= '2018-09-18'
    GROUP BY
        code
) b ON a.code = b.code
AND a.start_time = b.start_time 
AND CONVERT(VARCHAR(10),b.start_time,121) <= '2018-09-18'
ORDER BY
    a.code

 

感謝:https://blog.csdn.net/sinat_27693393/article/details/78673971

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM