Получить отличные идентификаторы для каждого значения группы mysql - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть следующий набор результатов:

client_id   status
------------------
67          1
67          0
67          0
67          0
77          0

Мне нужно получить только те client_id, чья запись latest (top) равна 0.

Я пытался следовать, нополучите оба 67 and 77.67 следует исключить.

SELECT DISTINCT client_id FROM
(
    SELECT client_id, status FROM client_history 
    WHERE (DATE(updated_on) BETWEEN '$from' AND '$to') 
    ORDER BY DATE(updated_on) DESC
) as ch
WHERE status = 0
GROUP BY client_id

Как установить условие, чтобы я мог получать только те записи, у которых status равно 0?

Ответы [ 3 ]

1 голос
/ 03 апреля 2019

Чтобы получить последние записи, вы можете использовать коррелированный подзапрос:

select ch.*
from client_history ch
where ch.updated_on = (select max(ch2.updated_on)
                       from client_history ch2
                       where ch2.client_id = ch.client_id and
                             date(updated_on) between ? and ?
                      );

Обратите внимание, что для передачи значений используются заполнители параметров (?), а не подстановка строк.

К этому вы можете просто добавить:

and status = 0

для фильтрации, которую вы хотите.

1 голос
/ 03 апреля 2019

использовать коррелированный подзапрос с несуществующим

select distinct client_id
from lient_history a
where not exists (select 1 from lient_history b where a.client_id=b.client_id 
  and status=1) 
and (DATE(updated_on) BETWEEN '$from' AND '$to')
0 голосов
/ 03 апреля 2019

Пожалуйста, попробуйте ниже единицы, я думаю, что это решит вашу проблему.

Declare @FromDate Date, @ToDate Date
Set @FromDate = -- whatever date range you wanted to give
Set @ToDate =  -- whatever date range you wanted to give
SELECT DISTINCT client_id FROM dbo.Client_history 
WHERE cast(updated_on as DATE)>=@FromDate and cast(updated_on as DATE)<=@ToDate
AND status = 0
ORDER BY DATE(updated_on) DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...