一个特殊的小组

时间:2016-07-15 08:33:00

标签: sql sql-server

假设您有一个包含两列的表,第一列中的某些日期以及与第二列中的这些列相关联的值。假设某些值重复了很多。例如,

2009-03-04 1.0
2009-03-05 0.0
2009-03-06 1.2
2009-03-09 0.0
2009-03-10 0.0
2009-03-11 3.0
2009-03-12 0.0
2009-03-13 0.0

是否有一种使用group by获取以下格式的特殊方法:

2009-03-05 0.0
2009-03-09 0.0
2009-03-12 0.0

所以基本上你在那些"组"中选择日期的最小值。在这种情况下,你有0.0?

3 个答案:

答案 0 :(得分:2)

我认为这是最大群体问题的变异(实际上是每组最小的n)。您可以在此处找到更多相关信息:https://stackoverflow.com/questions/tagged/greatest-n-per-group

答案 1 :(得分:1)

这应该可以解决问题:

declare @t table(d date, i decimal(5,2))
insert @t values
('2009-03-04', 1.0),
('2009-03-05', 0.0),
('2009-03-06', 1.2),
('2009-03-09', 0.0),
('2009-03-10', 0.0),
('2009-03-11', 3.0),
('2009-03-12', 0.0),
('2009-03-13', 0.0)

;with x as (
    select *, sum(i) over(order by d) g
    from @t
),
y as (
    select *, row_number() over(partition by g order by d) rn
    from x 
    where i = 0
)
select d, i
from y
where rn = 1

答案 2 :(得分:0)

我不确定我是否完全理解你的问题,但要在第一份陈述中得到结果

select * from table 
where value in (select min(eValue) from table)