簡體   English   中英

如何查詢一組列的最大月份/年份

[英]How to make a query of the max month/year of a group of columns

我真的不知道如何進行mysql查詢,以獲取最新月+年的所有數據(列)。

更具體一點,我需要對列進行分組(描述,數據1,數據2,數據3),並且僅獲得具有最高月份+年份的列。

該表包含如下數據:

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

但是由於這個即時消息,因為月份os desc2是6,所以最大寄存器是desc2,而月份12是不正確的。

您需要獲得一個表達式的最大值,例如:

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,則語法可能需要稍作更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM