如何比较同一列中的两个日期并获取最早的日期?

时间:2015-05-06 15:02:18

标签: sql-server-2008 date-comparison

我是SQL的新手,我收到了一个很好的任务 任务是:
我有两个表,一个名为TICKETS,另一个名为LOGS。

门票:
ID |门票| Open_Date
10 | 40000 | 2015-03-01 11:00:00
11 | 40001 | 2015-03-01 12:00:00
12 | 40002 | 2015-03-01 13:00:00
13 | 40003 | 2015-03-01 14:00:00
14 | 40004 | 2015-03-01 15:00:00

日志:
ID | Ticket_id | Time_Stamp |说明
01 | 10 | 2015-03-01 11:10:00 |正在进行中 02 | 10 | 2015-03-01 11:15:00 |正在进行中 03 | 10 | 2015-03-01 11:20:00 |转移
04 | 11 | 2015-03-01 12:10:00 |正在进行中 05 | 11 | 2015-03-01 12:15:00 |转移
06 | 11 | 2015-03-01 12:20:00 |正在进行中 07 | 12 | 2015-03-01 13:05:00 |转移
08 | 12 | 2015-03-01 13:10:00 |正在进行中 09 | 12 | 2015-03-01 13:15:00 |正在进行中 10 | 13 | 2015-03-01 14:05:00 |转移
11 | 13 | 2015-03-01 14:10:00 |转移
12 | 13 | 2015-03-01 14:15:00 |正在进行中 13 | 14 | 2015-03-01 15:10:00 |转移
14 | 14 | 2015-03-01 15:15:00 |正在进行中 15 | 14 | 2015-03-01 15:20:00 |转移

如表中所示,我有很多日志到一张票。我需要做的是找到描述为“进行中”的第一个日志并获取其日期(最早的)。如果它出现在“已转移”日志之后,将日志“已转移”作为票证的“Open_Date”,然后获取第一个日志“正在进行”的日期。

给我的查询只会带来第一个“进行中”日志:

`Select 
Tickets.ticket, 
Tickets.Open_Date,
Logs.Description,
Logs.Time_Stamp
From
Tickets LEFT JOIN Logs ON Tickets.ID = Logs.Ticket_id
WHERE
Logs.Time_Stamp = (Select MIN(Logs_2.Time_Stamp)
                   From Logs AS Logs_2
                   Where Logs_2.Description = 'In Progress')
And Logs.Time_Stamp < '2015-03-01 14:30:00'
And Logs.Time_Stamp > '2015-03-01 10:00:00'
Group By
Tickets.ticket, 
Tickets.Open_Date,
Logs.Description,
Logs.Time_Stamp`

我希望我能清楚我的问题:) 有人能帮帮我吗? THX。

1 个答案:

答案 0 :(得分:0)

我猜你真的不想要前一行/下一行的价值? (http://blog.sqlauthority.com/2013/09/22/sql-server-how-to-access-the-previous-row-and-next-row-value-in-select-statement/

但查询ID / Ticket_ID并按日期排序? (sql query to get earliest date