27,579
社区成员
发帖
与我相关
我的任务
分享
WITH
/* 测试数据
table1(Tid,workid,kind,creattime,price) AS (
SELECT 1001,201,'销售','2015-04-01',200 UNION ALL
SELECT 1002,201,'销售','2015-04-02',100 UNION ALL
SELECT 5001,201,'销售','2015-05-20',500 UNION ALL
SELECT 1001,702,'调整','2015-05-20',-100
), */
t1 AS (
SELECT a.*,
b.workid firstworkid
FROM table1 a
CROSS APPLY (
SELECT TOP 1 workid
FROM table1
WHERE table1.Tid <= a.Tid
ORDER BY creattime
) b
WHERE a.creattime = '2015-05-20'
)
SELECT Tid,workid,kind,creattime,price
FROM t1
WHERE firstworkid = 201
Tid workid kind creattime price
----------- ----------- ---- ---------- -----------
5001 201 销售 2015-05-20 500
1001 702 调整 2015-05-20 -100
--SQL2005可以这样
;WITH CTE AS(
SELECT T1.*,T2.workid workid2
,ROW_NUMBER()OVER(PARTITION BY T1.Tid ORDER BY T2.creattime)RN
FROM TB T1
JOIN TB T2 ON T1.Tid=T2.Tid
WHERE T1.creattime='2015-05-20'
)
SELECT Tid,workid,kind,creattime,price
FROM CTE
WHERE workid2='201' AND RN=1
DECLARE @workid INT,@creattime DATETIME
SET @workid='201'
SET @creattime='2015-05-20'
SELECT * FROM TB T1
WHERE creattime=@creattime
AND EXISTS(SELECT 1 FROM TB T2 WHERE T2.workid=@workid AND T1.Tid=T2.Tid
AND NOT EXISTS(SELECT 1 FROM TB T3 WHERE T2.Tid=T3.Tid AND T2.creattime>T3.creattime))