DB2查询组(按id),但具有日期最大值和序列最大值

DB2查询组(按id),但具有日期最大值和序列最大值,db2,Db2,我的桌子像 ID FName LName Date(mm/dd/yy) Sequence Value 101 A B 1/10/2010 1 10 101 A B 1/10/2010 2 20 101 X Y 1/2/2010 1 15 101 Z X 1/3/2010 5 10 102 A B 1

我的桌子像

ID    FName LName Date(mm/dd/yy) Sequence Value
101   A      B    1/10/2010      1       10 
101   A      B    1/10/2010      2       20
101   X      Y    1/2/2010       1       15
101   Z      X    1/3/2010       5       10
102   A      B    1/10/2010      2       10 
102   X      Y    1/2/2010       1       15
102   Z      X    1/3/2010       5       10
我需要一个应该返回2条记录的查询

101   A      B    1/10/2010      2       20
102   A      B    1/10/2010      2       10 
即日期的最大值和序列组id的最大值

有人能帮忙吗

-----------------------
-- get me my rows...
-----------------------
select * from myTable t
-----------------------
-- limiting them...
-----------------------
inner join 
----------------------------------
-- ...by joining to a subselection
----------------------------------
(select m.id, m.date, max(m.sequence) as max_seq from myTable m inner join
        ----------------------------------------------------
        -- first group on id and date to get max-date-per-id
        ----------------------------------------------------
        (select id, max(date) as date from myTable group by id) y
        on m.id = y.id and m.date = y.date
group by id) x

on t.id = x.id
and t.sequence = x.max_seq
这将是一个简单的解决方案,它不考虑连接,也不考虑序列为空的行


编辑:我添加了一个额外的组,首先选择每个id的最大日期,然后在此基础上加入以获取每个id的最大日期序列,然后再加入主表以获取所有列。

我已将您的表名视为员工。。 检查下面帮助你的东西

 select * from employee emp1
    join (select Id, max(Date) as dat, max(sequence) as seq from employee group by id)  emp2
    on emp1.id = emp2.id and emp1.sequence = emp2.seq and emp1.date = emp2.dat

我非常喜欢在SELECT语句中使用WITH子句来组织不同的步骤。我发现它使代码更容易阅读

WITH max_date(max_date)
AS (
  SELECT MAX(Date)
  FROM my_table
),

max_seq(max_seq)
AS (
  SELECT MAX(Sequence)
  FROM my_table
  WHERE Date = (SELECT md.max_date FROM max_date md)
)

SELECT *
FROM my_table
WHERE Date = (SELECT md.max_date FROM max_date md)
AND Sequence = (SELECT ms.max_seq FROM max_seq ms);

您应该能够根据需要对此进行进一步优化。

但它应该按id分组,并且我需要日期的最大日期和最大序列在emp2中,您可能最终得到来自不同行的最大日期和最大序列:我不认为这是OP想要的。