Select 行在 where 子句中使用计数条件
Select rows using a count condition inside a where clause
有一个table,MyTable(ID, Type, Date)。列 'Type' 的值可以是 1 或 2。
前'x'行,按'Date'排序且满足以下条件,必须选择。('a'和'b'是整数值)
所选 'x' 行最多只能包含 'a' 类型 1 行和 'b' 类型 2 行。(如果 a+b < x,则仅包含 a+b必须选择行。)
我可能完全错了,但我想通过在 WHERE 子句中包含 count() 来做到这一点。但是我不知道该怎么做。
我该如何解决这个问题?
更新:
例子-
x = 5
案例一:
a = 5, b = 5
结果:第 1、2、3、4、5 行
案例二:
a = 4, b = 1
结果:第 1、2、4、6、8 行
案例三:
a = 1, b = 5
结果:第 1、2、3、5、7 行
案例四:
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]
有一个table,MyTable(ID, Type, Date)。列 'Type' 的值可以是 1 或 2。
前'x'行,按'Date'排序且满足以下条件,必须选择。('a'和'b'是整数值)
所选 'x' 行最多只能包含 'a' 类型 1 行和 'b' 类型 2 行。(如果 a+b < x,则仅包含 a+b必须选择行。)
我可能完全错了,但我想通过在 WHERE 子句中包含 count() 来做到这一点。但是我不知道该怎么做。
我该如何解决这个问题?
更新:
例子-
x = 5
案例一: a = 5, b = 5
结果:第 1、2、3、4、5 行
案例二: a = 4, b = 1
结果:第 1、2、4、6、8 行
案例三: a = 1, b = 5
结果:第 1、2、3、5、7 行
案例四: 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]