roomid date state
101 2015-02-01 已售
101 2015-01-01 未售
参数:@日期
@日期小于02-01时,需要得到结果是:
101 2015-01-01 未售
@日期大于等于02-01时,显示空。
------解决思路----------------------
DECLARE @日期 DATETIME类似这样
SET @日期='2015-01-21'
;WITH CTE AS(
SELECT * FROM TB WHERE date<=@日期
)
SELECT T1.*
FROM CTE T1
LEFT JOIN CTE T2 ON T1.roomid=T2.roomid AND T2.STATE='已售'
WHERE T2.roomid IS NULL
------解决思路----------------------
DECLARE @日期 DATE = '2015-02-01'
;WITH CTE AS
(
SELECT 101 AS roomid , '2015-02-01' AS date ,'已售' AS STATE
UNION ALL
SELECT 101 AS roomid , '2015-01-01' AS date ,'未售' AS STATE
UNION ALL
SELECT 102 AS roomid , '2015-02-01' AS date ,'未售' AS STATE
UNION ALL
SELECT 102 AS roomid , '2015-01-01' AS date ,'已售' AS STATE
)
SELECT *
FROM CTE a
WHERE a.date <= @日期
AND a.STATE = '未售'
AND NOT EXISTS(SELECT * FROM CTE WHERE roomid = a.roomid
AND date > a.date
AND date <= @日期)