-1

看表(如TRClient)

| 身份证 | 客户ID | 标识 | 开始日期 | 结束日期 |
|----|---------|-----|--------------|------------ --|
| 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' |

想要clientidenddate不大于或等于它之前的记录 (两条记录之间的关系可以通过 确定)。enddatesId

我进行了以下查询:(
这里我对 TRClient 中的每个客户端 ID 使用循环)

Select clientid from TRClient where clientId = 10 and sId = 1 and not (endDate >= '2012-05-31') 

我想检查每个客户的最高 id 记录(如果 clientid 和 sId 相同,那么它应该只检查一个 id 更大的记录。例如,如果我们正在谈论,在给定的表中clientid = 10sid = 1我们将得到两行(id = 1 and id = 3)。在这里我想检查enddate >= '2012-05-31' for id = 3)

4

4 回答 4

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 会尝试自动转换它。根据服务器区域设置,您可能会处理月/日。

于 2012-06-28T06:41:45.760 回答
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)
于 2012-06-28T06:29:45.930 回答
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 但您可以将它们添加到我的代码中,您明白了吗?

于 2012-06-28T06:34:44.840 回答
0

这就是我想做的:

SELECT ClientId FROM TRClient WHERE Id = (SELECT MAX(Id) FROM TRClient
WHERE ClientId = 10 AND sId = 1) AND StartDate >= '2012-05-31'
于 2012-06-28T06:59:46.457 回答