Выберите конкретные записи в таблице - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть две таблицы в SQL Server. Первая содержит список клиентов, а вторая - список действий для каждого клиента. Как настроить запрос, чтобы выбрать только последнее действие для каждого из клиентов?

Например:

  • Клиент1 имеет Акт1, Акт2, Акт3, Акт4
  • Клиент2 имеет Акт1, Акт2

Я хочу увидеть Client1 ---> Act4 и Client2 ---> Act2.

Есть способ сделать это?

EDIT: Я объединил две таблицы в курсоре, теперь у меня такая ситуация (есть и другие поля, но они не являются важными):

ID             DATE
00001         25/04/2019 09.20
00001         30/04/2019 10.00
00002         23/04/2019 09.00
00002         29/04/2019 11.00
00003         NULL

Теперь мне нужно получить такой результат:

ID             DATE
00001         30/04/2019 10.00
00002         29/04/2019 11.00
00003         NULL

Я пытался с:

 SELECT temp.* ;
 FROM temp
 WHERE TTOC(temp.date,1) IN (SELECT TTOC(MAX(t.date),1) FROM temp FULL OUTER JOIN t ON temp.ID == t.ID GROUP BY temp.ID)

где t - одна из двух исходных таблиц до слияния. Это работает, но пользователь без информации в поле DATE не отображается. Есть предложения?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Для вашего temp стола вам нужно только group by id:

SELECT id, max(date) lastact
FROM temp
GROUP BY id

Если вы хотите увидеть и другие столбцы:

SELECT t.* 
FROM temp t LEFT JOIN (
  SELECT id, max(date) lastact
  FROM temp
  GROUP BY id
) g on g.id = t.id and g.lastact = t.date
0 голосов
/ 29 апреля 2019
select Client
       ,reverse(left(reverse(Act), charindex(',', reverse(Act)) -1)) as LastAct
from table

Как это работает:
переверните всю строку, затем найдите первую запятую, которая используется как последняя запятая, затем обрежьте строку слева от нее, переверните ее обратно.

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