sql - 使用 where 子句中的计数条件选择行

标签 sql sql-server t-sql

有一个表,MyTable(ID, Type, Date)。 “类型”列的值可以为 1 或 2。

必须选择按“日期”排序并满足以下条件的前“x”行。(“a”和“b”是整数值)

所选的“x”行最多只能包含“a”类型 1 行和“b”类型 2 行。(如果 a+b < x,则只需选择 a+b 行。)

我可能完全错了,但我有一个想法,可以通过在 WHERE 子句中包含 count() 来实现此目的。但我不知道该怎么做。

我该如何解决这个问题?

更新:

示例 -

enter image description here

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/

相关文章:

sql - SQL TRIM() 函数中的奇怪错误

.net - 传递的主键值的数量必须与实体上定义的主键值的数量匹配

sql - 在多行的值之间进行选择

sql-server-2005 - SQL中的三元运算符? "invalid length parameter passed to the LEFT or SUBSTRING function"

sql - 存储库模式困境 : Redundant Queries vs. 数据库往返

sql - 如何使用Oracle从firstname.lastname@email.com中提取姓氏?

mysql - 选择mysql中每组的顶行

php - 通过不可靠的网络连接在 MySQL 和 SQL Server 之间同步数据

sql-server - 启用文件流 - 添加文件组文件流不起作用

sql - 独特的前 5 名随机查询