Посмотрите на таблицу (например, TRClient)Путаница в SQL запросе
| 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)
Select clientid from TRClient where clientId = 10 and sId = 1 and not (endDate >= '2012-05-31')
Я хочу, чтобы проверить запись для самого высокого идентификатора для каждого клиента (если ClientID и Sid являются то же самое, то он должен проверить только для одной записи, чей идентификатор больше. например, в данной таблице, если мы говорим о clientid = 10
и sid = 1
мы получим две строки (id = 1 and id = 3)
. Здесь я хочу, чтобы проверить enddate >= '2012-05-31' for id = 3)
Вы можете упростить это, заказав его в порядке возрастания, таким образом, что каждая следующая строка всегда будет равна или больше текущей строки, но не менее что. – madhairsilence
Являются ли столбцы 'startdate' и' enddate' типа 'date'? Потому что, если они являются строками, как это выглядит с первого взгляда, вы не сможете сравнивать их в таком формате. Я считаю, единственное достоверное сравнение строк дат будет в формате yyyy-mm-dd. –
@ AndriusNaruševičius да, тип данных обоих столбцов - ** datetime ** – hims056