CREATE TABLE [dbo].[testtable](
[name] [nchar](10) NULL,
[time1] [datetime] NULL,
[time2] [datetime] NULL,
[time3] [datetime] NULL,
[time4] [datetime] NULL,
[time5] [datetime] NULL,
[time6] [datetime] NULL
) ON [PRIMARY]
INSERT INTO testtable VALUES('a1','2014-2-23 00:00:00','2014-2-23 01:00:00','2014-2-23 02:00:00','2014-2-23 03:00:00','2014-2-23 04:00:00','2014-2-23 05:00:00');
INSERT INTO testtable VALUES('a2','2014-2-24 00:00:00','2014-2-24 01:00:00','2014-2-24 02:00:00','2014-2-24 03:00:00','2014-2-24 04:00:00','2014-2-24 05:00:00');
INSERT INTO testtable VALUES('a3','2014-2-25 00:00:00','2014-2-25 01:00:00','2014-2-25 02:00:00','2014-2-25 03:00:00','2014-2-25 04:00:00','2014-2-25 05:00:00');
INSERT INTO testtable VALUES('a4','2014-2-26 00:00:00','2014-2-26 01:00:00','2014-2-26 02:00:00','2014-2-26 03:00:00','2014-2-26 04:00:00','2014-2-26 05:00:00');
需求是要查询每个人的前三个时间(时间是要按升序排)。下面是我的方案,但是想优化,有没有最优效率的!我想到一种方案就是用case when,把那三条语句合成一条(三条语句:是指‘第一’‘第二’‘第三’),求实现
SELECT name AS 名字,
( SELECT jztime
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY jztime ) AS number ,
jztime
FROM ( SELECT time1 jztime
UNION
SELECT time2
UNION
SELECT time3
UNION
SELECT time4
UNION
SELECT time5
UNION
SELECT time6
) jztimetable
WHERE ISDATE(jztime) = 1
) jztimeandnumbertable
WHERE number = 1
) AS 第一时间 ,
( SELECT jztime
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY jztime ) AS number ,
jztime
FROM ( SELECT time1 jztime