簡體   English   中英

如何在mysql數據庫中找到每個月的第一條和最后一條記錄

[英]how to find the first and last records of every month in mysql database

我想在 sql 中獲取每個月的第一條和最后一條記錄,但我的查詢給出了下面的結果,這是我的查詢

SELECT DISTINCT month, amount, 
       MIN(date) OVER (PARTITION BY month ORDER BY utility.month) 
FROM 
    utility;

上面查詢的結果

數量 分鍾(日期)
2022 年 2 月 200 2022-02-02
2022 年 1 月 1000 2022-01-01
2022 年 1 月 200 2022-01-01
2022 年 3 月 1000 2022-02-06

嘗試同時使用MINMAX以及GROUP BY

從 W3Schools 檢查這個

MIN() function 返回所選列的最小值。

MAX() function 返回所選列的最大值。

試試這個代碼: SELECT DISTINCT month, amount, MIN(date), MAX(date) FROM utility GROUP BY month;

您可以先獲取MIN()MAX()值,然后轉換為子查詢,然后將utility表連接兩次以獲取與提取日期對應的金額,如下所示:

SELECT v.month,
       v.mindt,
       u1.amount,
       v.maxdt,
       u2.amount
   FROM
(SELECT month, 
       MIN(date) mindt, MAX(date) maxdt
FROM 
    utility
GROUP BY month) v
JOIN utility u1 ON u1.date=v.mindt
JOIN utility u2 ON u2.date=v.maxdt
;

這將產生如下結果:

心靈 數量 最大值 數量
2022 年 1 月 2022-01-02 250 2022-01-29 350
2022 年 2 月 2022-02-01 300 2022-02-28 500
2022 年 3 月 2022-03-03 500 2022-03-18 300

或者您可以修改子查詢以執行UNION ALL ,加入一次utility並僅在原始 3 列中返回所有內容:

SELECT v.month,
       v.minmaxdt,
       u.amount
   FROM
(SELECT month, 
        MIN(date) minmaxdt
    FROM utility
   GROUP BY month 
 UNION ALL
 SELECT month, 
        MAX(date) 
    FROM utility
    GROUP BY month
 ) v
JOIN utility u ON u.date=v.minmaxdt
ORDER BY v.month, v.minmaxdt;

這將產生如下結果:

最小最大值 數量
2022 年 2 月 2022-02-01 300
2022 年 2 月 2022-02-28 500
2022 年 1 月 2022-01-02 250
2022 年 1 月 2022-01-29 350
2022 年 3 月 2022-03-03 500
2022 年 3 月 2022-03-18 300

演示小提琴

暫無
暫無

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

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