假设您有一个包含两列的表,第一列中的某些日期以及与第二列中的这些列相关联的值。假设某些值重复了很多。例如,
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?
答案 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)