我真的不知道如何在获取最早的一个月 年的所有数据(列(的地方进行mysql查询。
我需要对列进行分组(Description1,Data2,Data3(,并且仅获得一个月份 年的列。
表包含这样的数据:
description data1 data2 data3 year month adddate
desc1 0 7 1 2019 5 2019-05-23
desc2 0 7 1 2019 5 2019-05-23
desc3 1 7 1 2019 5 2019-05-23
desc4 0 2 1 2018 12 2019-05-23
我已经尝试在一个月,年和添加时使用Max。
select description, data1, data2, data3, max(year) as year, max(month) as month, max(adddate) as adddate
from tabledata
group by description, data1, data2, data3
但是,我得到的是,最大寄存器是desc2,而第12个月是不正确的,因为该月为desc2为6。
您需要获得表达式的最大值:
100 * year + month
或
12 * year + month
这样做:
select *
from tabledata
where 100 * year + month = (
select max(100 * year + month)
from tabledata
)
请参阅演示。
结果:
> description | data1 | data2 | data3 | year | month | adddate
> :---------- | ----: | ----: | ----: | ---: | ----: | :---------
> desc1 | 0 | 7 | 1 | 2019 | 5 | 23/05/2019
> desc2 | 0 | 7 | 1 | 2019 | 5 | 23/05/2019
> desc3 | 1 | 7 | 1 | 2019 | 5 | 23/05/2019
您需要找到年度和月份的最大组合(maxyearmonth(,然后再次加入您的桌子,以找到与Maxyearmonth匹配的所有行。这是SQL Server的解决方案...
IF OBJECT_ID('tempdb.dbo.#tabledata', 'U') IS NOT NULL DROP TABLE #tabledata;
CREATE TABLE #tabledata
(
description VARCHAR(10)
, data1 INT
, data2 INT
, data3 INT
, year INT
, month INT
, adddate DATE
);
INSERT INTO #tabledata VALUES ('desc1', 0, 7, 1, 2019, 5, '2019-05-23')
INSERT INTO #tabledata VALUES ('desc2', 0, 7, 1, 2019, 5, '2019-05-23')
INSERT INTO #tabledata VALUES ('desc3', 1, 7, 1, 2019, 5, '2019-05-23')
INSERT INTO #tabledata VALUES ('desc4', 0, 2, 1, 2018, 12, '2019-05-23')
select a.description, a.data1, a.data2, a.data3
from #tabledata a
inner join
(
select max(convert(char(4), year) + right('0' + convert(varchar(2), month), 2)) as [MaxYearMonth]
from #tabledata
) b on convert(char(4), a.year) + right('0' + convert(varchar(2), a.month), 2) = b.MaxYearMonth
产生这个...
description data1 data2 data3
----------- ----------- ----------- -----------
desc1 0 7 1
desc2 0 7 1
desc3 1 7 1
单击此处以在行动中查看它。
您提到" mysql",因此,如果您真的使用MySQL,则语法可能需要更改。