有一个表,MyTable(ID, Type, Date)。 “类型”列的值可以为 1 或 2。
必须选择按“日期”排序并满足以下条件的前“x”行。(“a”和“b”是整数值)
所选的“x”行最多只能包含“a”类型 1 行和“b”类型 2 行。(如果 a+b < x,则只需选择 a+b 行。)
我可能完全错了,但我有一个想法,可以通过在 WHERE 子句中包含 count() 来实现此目的。但我不知道该怎么做。
我该如何解决这个问题?
更新:
示例 -
x = 5
情况1: a = 5,b = 5
结果:第 1,2,3,4,5 行
情况 2: a = 4,b = 1
结果:第 1,2,4,6,8 行
案例3: a = 1,b = 5
结果:第 1,2,3,5,7 行
案例 4: a = 2,b = 1
结果:第 1,2,4 行
最佳答案
您可以通过将 UNION 嵌套在另一个查询中来实现:
select top @x *
from (
select top @a *
from table
where type = '1'
order by [date]
union
select top @b *
from table
where type = '2'
order by [date]
) t
order by [date]
关于sql - 使用 where 子句中的计数条件选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28613801/