选择2列之间的最小值与条件匹配的行

时间:2016-07-11 08:57:11

标签: sql-server

我正在运行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 1EventID 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列都相同,没有任何优先级。

1 个答案:

答案 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