[英]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 |
嘗試同時使用MIN
和MAX
以及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.