日期:2014-05-16  浏览次数:20589 次

T-SQL语句有问题请教
CREATE TABLE #TMP
(
ID INT IDENTITY(1,1),
USERID INT,
INDATE DATE,
OUTDATE DATE,
INDATETIME DATETIME,
OUTDATETIME DATETIME
)
INSERT INTO #TMP VALUES( 1,'2014-04-22','2014-04-22','2014-04-22 9:01',NULL)
INSERT INTO #TMP VALUES( 1,'2014-04-22','2014-04-22','2014-04-22 9:02',NULL)
INSERT INTO #TMP VALUES( 1,'2014-04-22','2014-04-22','2014-04-22 9:03',NULL)
INSERT INTO #TMP VALUES( 1,'2014-04-22','2014-04-22','2014-04-22 9:05','2014-04-22 10:00')
INSERT INTO #TMP VALUES( 1,'2014-04-22','2014-04-22',NULL,'2014-04-22 10:05')
INSERT INTO #TMP VALUES( 1,'2014-04-22','2014-04-22','2014-04-22 10:30',NULL)
INSERT INTO #TMP VALUES( 1,'2014-04-22','2014-04-22','2014-04-22 10:35','2014-04-22 11:00')
INSERT INTO #TMP VALUES( 1,'2014-04-23','2014-04-23','2014-04-23 13:00',NULL)
INSERT INTO #TMP VALUES( 1,'2014-04-23','2014-04-23','2014-04-23 13:20',NULL)
INSERT INTO #TMP VALUES( 1,'2014-04-23','2014-04-23','2014-04-23 13:20','2014-04-23 13:59')
INSERT INTO #TMP VALUES( 1,'2014-04-23','2014-04-23',NULL,'2014-04-23 14:00')

SELECT * FROM #TMP

--要实现的效果
SELECT 1,'2014-04-22','2014-04-22','2014-04-22 9:01','2014-04-22 10:05'
UNION ALL
SELECT 1,'2014-04-22','2014-04-22','2014-04-22 10:30','2014-04-22 11:00'
UNION ALL
SELECT 1,'2014-04-23','2014-04-23','2014-04-23 13:00','2014-04-23 14:00'

以上是数据库结构和模拟数据的创建语句,简单描述就是第一条INDATETIME和最后一条OUTDATETIME进行配对。

请各位给支支招,多谢。
------解决方案--------------------
引用:
Quote: 引用:

单纯从数据的角度这种情况,我也没有看到规律来区分它 。

应该是有个批次号。

设置批次号,然后一次一次插入,当下一批次的时候,更新批次号再插入。

这种直接靠数据区分,又没有明确的规律,强行处理也会产生很多弊端。

我再详细描述一下,

需求是:最小的IN和最后一个OUT匹配。

所谓最小的IN其实是:大于前一条IN和OUT配对的记录中最小的IN。

所谓最后一个OUT是:该OUT下面那条记录中的OUT为NULL或者该OUT下面那条记录中的IN和OUT都不为NULL。

不知描述的内容大师是否能看明白……

我觉得是有规律可寻的,可就是写不出来,求大师再指点一下。


勉强能写,但是长此以往不是办法呀...


CREATE TABLE #TMP
(
ID INT IDENTITY(1,1),
USERID INT,
INDATE DATE,
OUTDATE DATE,
INDATETIME DATETIME,
OUTDATETIME DATETIME   
)
INSERT INTO #TMP VALUES( 1,'2014-04-22','2014-04-22','2014-04-22 9:01',NULL)
INSERT INTO #TMP VALUES( 1,'2014-04-22','2014-04-22','2014-04-22 9:02',NULL)
INSERT INTO #TMP VALUES( 1,'2014-04-22','2014-04-22','2014-04-22 9:03',NULL)
INSERT INTO #TMP VALUES( 1,'2014-04-22','2014-04-22','2014-04-22 9:05','2014-04-22 10:00')
INSERT INTO #TMP VALUES( 1,'2014-04-22','2014-04-22',NULL,'2014-04-22 10:05')
INSERT INTO #TMP VALUES( 1,'2014-04-22','2014-04-22','2014-04-22 10:15','2014-04-22 10:20')
INSERT INTO #TMP VALUES( 1,'2014-04-22','2014-04-22','2014-04-22 10:30',NULL)
INSERT INTO #TMP VALUES( 1,'2014-04-22','2014-04-22','2014-04-22 10:35','2014-04-22 11:00')
INSERT INTO #TMP VALUES( 1,'2014-04-23','2014-04-23','2014-04-23 13:00',NULL)
INS