如何查询一组专栏的最高月/年



我真的不知道如何在获取最早的一个月 年的所有数据(列(的地方进行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,则语法可能需要更改。

相关内容

  • 没有找到相关文章

最新更新