我的表就像
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的最大序列组的日期和最大值。
有人可以为此提供帮助。
答案 0 :(得分:1)
-----------------------
-- 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
这将是一个简单的解决方案,它不考虑关系,也不考虑序列为NULL的行。
编辑我添加了一个额外的组,首先选择max-date-per-id,然后加入此组以获取max-sequence-per-max-date-per-id在加入主表之前获取所有列。
答案 1 :(得分:1)
我认为您的表名是员工.. 检查下面的事情帮助了你。
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
答案 2 :(得分:1)
我很喜欢在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);
您应该可以根据需要进一步优化。