单个查询以根据先前结果中的字段获取所有匹配项

时间:2017-11-22 00:40:39

标签: sql sql-server

我有一个包含三个字段的表:name(string)id(number)date(time)

我需要一个查询,它会返回日期范围内的所有匹配项,然后针对每个匹配项返回所有其他具有相同ID的匹配项。

即如果:

John 100 1/1/2000 
Karen 200 1/1/2000  
Tom 300 2/1/2000
Janet 100 3/1/2000

我需要一个查询,对于一个日期范围,即1-1 / 1/2000将返回John,Karen和Janet - John和Karen,因为他们在日期范围和Janet,因为它具有相同的id(100)来自日期结果的其中一个ids(约翰)。

我必须知道结果的顺序,因为我需要将结果转换为表格中的JSON

[ [ dateMatch1, extraIDmatch1, extraIdmatch2 ], [ dateMatch2] ]

或者在这种情况下[[' John',' Janet' ],[' Karen']]

实现这一目标的最佳方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

一种方法是:

select t.*
from t
where t.id in (select t2.id
               from t t2
               where t2.date between @start and @end
              )
order by id, (case when t.date between @start and @end then 1 else 2 end);