繁体   English   中英

如何使用mysql中的月和年表列(int)获取最旧的条目(月-年)?

[英]How can I get the oldest entry (month-year) using month and year table column (int) in mysql?

我有一个表格,其中一列保留年份,另一列保留月份。 如何按son_id 获得最旧的日期(最小td_month-td_year)分组? 注意事项:table_id 可能不按顺序

CREATE TABLE mytable (
table_id INT,  
father_id INT, 
son_id INT, 
mt_month INT, 
mt_year INT);

INSERT INTO mytable VALUES
("101","11","370","12","2013"),
("102","11","370","1","2014"),
("103","11","371","2","2015"),
("105","11","371","11","2008"),
("107","11","371","12","2008"),
("108","11","372","2","2009"),
("109","11","372","3","2009"),
("111","11","372","12","2009"),
("113","11","373","1","2013"),
("115","11","373","11","2017"),
("117","11","373","11","2011"),
("119","11","373","12","2012");

如果不考虑年份,此查询将出错月份:

select son_id, min(mt_month), min(mt_year) from mytable group by son_id;

https://www.db-fiddle.com/f/v1Xty9c1SAp2PfaWCC4WvK/3

我应该使用 concat mt_month 和 mt_year 并将其转换为日期格式吗?

您需要先获得最小年份:

SELECT y.son_id,y.min_year,min(t.mt_month) AS min_month
FROM mytable t
INNER JOIN (
  select son_id,  min(mt_year) AS min_year from mytable group by son_id) y
ON t.son_id=y.son_id
AND t.mt_year=y.min_year
GROUP BY y.son_id,y.min_year;

如果您想要每年的第一个月,那么您需要对年份进行分组,以找到每年的最小月份,然后再进行第二个分组。

select son_id, month, year
from (
  select son_id, min(mt_month) AS month, min(mt_year) as YEAR
  from mytable 
  group by son_id,mt_year) x
group by son_id
;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM