Как выбрать первую 1 дату из столбца даты без отметки времени? - PullRequest
0 голосов
/ 24 марта 2019

Я пытаюсь выбрать только одну строку register_date для каждого сервиса из двух таблиц.

Но вывод запроса включает несколько строк, если у клиента больше строк с одинаковой датой register_date.

Как мне решить эту проблему?

Мне нужно выбрать одну из двух таблиц.

  • tServices
  • tRegister

Мой код:

  SELECT tServices.Client_id, tRegister.register_date, 
         tServices.type_service, 
         tServices.start_date, tServices.end_date
  FROM tServices INNER JOIN tRegister
         ON tRegister.Client_id = tServices.ClientId AND 
            tServices.type_service IN (3,2)
  WHERE tRegister.register_date = 
                          (SELECT top 1 tRegister2.register_date
                          FROM tRegister as tRegister2
                          WHERE tRegister2.ClientId = tServices.ClientId
                          ORDER BY tRegister2.register_date asc)

Вывод выглядит как показано ниже для одного клиента, но я хочу видеть одну строку в выводе.

 Client_Id  register_date   Type_Service    Start_Date  End_Date

  1001    21-11-2018             2        17-01-2019    19-3-2019
  1001    21-11-2018             2        17-12-2018    19-3-2019

1 Ответ

0 голосов
/ 25 марта 2019

Для этого вы можете использовать оператор apply:

select *
from tServices s
  cross apply (
  select top (1) * from tRegister r
  where r.Client_id = s.ClientId
  order by r.register_date
) ca;

Обратите внимание, что существует 2 версии apply:

  • cross (что эквивалентно inner объединению);
  • outer, который работает как left outer соединение.

В приведенном выше запросе вы не увидите строк из tServices для клиентов, у которых нет регистрации. Если они все еще нужны, замените cross на outer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...