我正在运行sql server 2012。 我的表看起来像这样:
EventID | EventDate1 | EventDate2
1 | 01/06/2016 | 02/06/2016
2 | 04/06/2016 | 02/06/2016
3 | NULL | 03/06/2016
4 | 01/06/2016 | NULL
鉴于某一天,我需要选择当天发生的最早日期的所有活动。
因此,如果用户选择01/06,我希望向他们展示EventID 1
和EventID 4
。至于02/06,我想展示EventID 2
。同样,在第3天,我需要显示EventID 3
。在这种情况下,第4天没有结果,因为EventID 2已经在第2天发生了。
以下是我从上表中获取最早事件列表的方法: - 在stackoverflow中获取此信息
Select EventID, EventDate1, EventDate2,
Case When EventDate2 < EventDate1 Then EventDate2
when EventDate1 is null then EventDate2
else EventDate1
End As TheMin
From Event
从这张表中,我必须选择TheMin =输入日期的行。在这里,我被困住了。我不能在where子句中使用TheMin。
那么..我怎样才能实现我的需要?
修改
正如DineshDB所说,我编辑了我的问题,以便更清楚。
我想选择在02/06首先发生的所有EventID。
结果应为
EventID | EventDate1 | EventDate2
2 | 04/06/2016 | 02/06/2016
虽然事件1发生在之前,但第一次发生的事件是在01/06。因此它不会出现在02/06的结果中,因此02/06的结果应该只是事件2,它首先发生在02/06。
两个EventDate列都相同,没有任何优先级。
答案 0 :(得分:1)
试试这个,
DECLARE @TheMin DATETIME = '11-Jul-2016'
Select *
From
(
Select EventID, EventDate1, EventDate2,
Case When EventDate2 < EventDate1 Then EventDate2
when EventDate1 is null then EventDate2
else EventDate1
End As TheMin
From Event
) t
Where TheMin = @TheMin