最大值基于两列

时间:2017-01-29 05:30:20

标签: sql oracle

我有一个包含多个列的表,其中包含月份和年份。我试图根据column1,column2确定最佳月份和年份。

我有一个测试表的DDL。

CREATE TABLE "TEST" 
   (    "COLUMN1" VARCHAR2(6 BYTE), 
    "COLUMN2" VARCHAR2(6 BYTE), 
    "YEAR" NUMBER, 
    "MONTH" NUMBER
   );

这是示例表中的数据。

REM INSERTING into TEST
SET DEFINE OFF;
Insert into TEST (COLUMN1,COLUMN2,YEAR,MONTH) values ('A','A',11,4);
Insert into TEST (COLUMN1,COLUMN2,YEAR,MONTH) values ('A','A',14,3);
Insert into TEST (COLUMN1,COLUMN2,YEAR,MONTH) values ('A','A',11,5);
Insert into TEST (COLUMN1,COLUMN2,YEAR,MONTH) values ('A','A',14,1);

我希望获得最高月份和年份的记录。当我尝试使用此查询检索记录时

 SELECT t.COLUMN1, t.COLUMN2, max(t.YEAR), max(t.MONTH) 
 FROM TEST t 
 group by COLUMN1, COLUMN2;

我得到了这个结果

enter image description here

在我看来,它将最大年份和最大月份分开,与其他列无关。 预期的结果应该是 enter image description here

我怎样才能得到合适的结果? 我尝试了几个自连接无济于事。

3 个答案:

答案 0 :(得分:2)

您希望将Oracle的内置LAST(或FIRST)与Shpping : [ { "id": "1", "name": "Dress", "deleted_at": null, "created_at": null, "updated_at": null, "minicomp": [ { "id": "1", "cname": "basic", "base_id": 44 }, { "id": "2", "cname": "Shirt", "base_id": 177444 }, { "id": "3", "cname": "Pants", "base_id": 444 } ] } ]; 一起使用,如下所示:

MAX

它只会在最近一年找到最大月份。

答案 1 :(得分:0)

您还可以以某种方式连接两个值,计算最大值,然后拆分它们。在年和月的情况下,您可以计算自某个时代以来的月份:

select column1, column2,
       trunc(max(year*12+month-1)/12) year,
       mod  (max(year*12+month-1),12)+1 month
  from test
 group by column1, column2

答案 2 :(得分:-1)

select distinct column1, column2, year, max(month) over(partition by column1, column2, year) mxmnth
from ir_wip.test  tbl2
where year=(select  max(year) from ir_wip.test  tbl where tbl.column1=tbl2.column1 and tbl.column2=tbl2.column2)