[英]SQL Select last 6 month from a table that saves year and month in columns
[英]Select last inserted value of each month for every year from DATETIME
我有一個DATETIME來存儲引入值的時間,如以下示例所示:
CREATE TABLE IF NOT EXISTS salary (
change_id INT(11) NOT NULL AUTO_INCREMENT,
emp_salary FLOAT(8,2),
change_date DATETIME,
PRIMARY KEY (change_id)
);
我將填寫以下示例:
+-----------+------------+---------------------+
| change_id | emp_salary | change_date |
+-----------+------------+---------------------+
| 1 | 200.00 | 2018-06-18 13:17:17 |
| 2 | 700.00 | 2018-06-25 15:20:30 |
| 3 | 300.00 | 2018-07-02 12:17:17 |
+-----------+------------+---------------------+
我想獲得每年每個月的最后插入值。
因此,對於我所做的示例,這應該是Select的輸出:
+-----------+------------+---------------------+
| change_id | emp_salary | change_date |
+-----------+------------+---------------------+
| 2 | 700.00 | 2018-06-25 15:20:30 |
| 3 | 300.00 | 2018-07-02 12:17:17 |
+-----------+------------+---------------------+
由於2的版本過舊,因此不會出現1
您可以使用自change_date
來選擇分組明智的最大行,在內部查詢中,通過按月和年分組數據,選擇change_date
的最大值
select t.*
from your_table t
join (
select max(change_date) max_change_date
from your_table
group by date_format(change_date, '%Y-%m')
) t1
on t.change_date = t1.max_change_date
如果您可以使用支持窗口函數的Mysql 8,則可以使用公用表表達式和rank()函數來選擇每年和每月具有最高change_date的行
with cte as(
select *,
rank() over (partition by date_format(change_date, '%Y-%m') order by change_date desc ) rnk
from your_table
)
select * from cte where rnk = 1;
以下查詢將為您工作。 它使用按月和年分組,以查找每個月和年的最大記錄。
SELECT s1.*
FROM salary s1
INNER JOIN (
SELECT MAX(change_date) maxDate
FROM salary
GROUP BY MONTH(change_date), YEAR(change_date)
) s2 ON s2.maxDate = s1.change_date;
小提琴鏈接: http ://sqlfiddle.com/#!9/1bc20b/15
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.