查看表格(例如TRClient)
| ID | clientid | sId | startdate | enddate | |----|----------|-----|--------------|--------------| | 1 | 10 | 1 | '2011-06-01' | '2012-05-31' | | 2 | 25 | 3 | '2011-06-01' | '2012-05-31' | | 3 | 10 | 1 | '2012-06-01' | '2013-05-31' |
我希望clientid
的enddate
大于或等于之前的记录enddate
(两个记录之间的关系可以由sId
确定。)
我做了以下查询:
(这里我在TRClient中为每个客户端ID使用循环)
Select clientid from TRClient where clientId = 10 and sId = 1 and not (endDate >= '2012-05-31')
我想检查每个客户端的最高id的记录(如果clientid和sId相同,那么它应该仅检查id为更大的一个记录。例如,如果我们在讨论clientid = 10
并且在给定的表中sid = 1
我们会收到两行(id = 1 and id = 3)
。在这里,我想查看enddate >= '2012-05-31' for id = 3)
答案 0 :(得分:1)
如果数据库中的列datetime
并且您想比较它们,那么您还需要一个有效的比较值。
试试这个:
SELECT clientid
FROM TRClient
WHERE clientId = 10
AND sId = 1
AND DATEDIFF(n, startDate,'05/31/2012') > 0
如果您编写像'05 / 31/2012这样的字符串格式的sql server尝试自动转换它。 根据您可能处理月/日的服务器区域设置。
答案 1 :(得分:0)
select * from TRClient trc1 join TRClient trc2 on trc1.id = trc2.sid
where trc1.startDate <= trc2.endDate
或
select * from TRClient trc1 where exists
(select 1 from TRClient trc2 where trc2.sid = trc1.id and trc1.startDate <= trc2.endDate)
答案 2 :(得分:0)
SELECT ClientID
FROM TRClient AS TRC1
WHERE startDate < (SELECT EndDate
FROM TRClient AS TRC2
WHERE TRC2.ID = (SELECT Max(ClientID)
FROM TRClient AS TRC3
WHERE TRC3.ID < TRC1.ID))
我忘了使用sID和ClientID,但你可以将它们添加到我的代码中,你明白了吗?
答案 3 :(得分:0)
这就是我想要做的事情:
SELECT ClientId FROM TRClient WHERE Id = (SELECT MAX(Id) FROM TRClient
WHERE ClientId = 10 AND sId = 1) AND StartDate >= '2012-05-31'