-1

テーブルを見てください (例: TRClient)

| | ID | クライアント ID | sID | 開始日 | 終了日 |
|----|----------|-----|--------------|------------ --|
| | 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( 2 つのレコード間の関係は によって決定できます)。enddateenddatesId

次のクエリを作成しました:
(ここでは、TRClient の各クライアント ID に対してループを使用しています)

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

各クライアントの最大 ID のレコードをチェックしたい (clientid と sId が同じ場合は、ID がより大きい 1 つのレコードのみをチェックする必要があります。たとえば、指定されたテーブルで話している場合、clientid = 102sid = 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 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 * 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 WHERE Id = (SELECT MAX(Id) FROM TRClient
WHERE ClientId = 10 AND sId = 1) AND StartDate >= '2012-05-31'
于 2012-06-28T06:59:46.457 に答える