SQL получить все пользователи последний поиск - PullRequest
0 голосов
/ 30 марта 2020

Я могу легко получить запросы пользователей, но я бы хотел, чтобы все пользователи ПОСЛЕДНИМ поиском. Например, приведенный ниже код SQL получит этот последний c последний запрос пользователей.

select uid, itemDescription, date from SEARCH 
    WHERE date BETWEEN '2020-03-01' AND '2020-03-30' 
        AND uid = "000-000-000-000-000"
    ORDER BY date DESC
    LIMIT 1

Если я попытаюсь отредактировать это и удалить uid = "", это не будет работать, так как будет ограничено одним поиском. Если я уберу также LIMIT 1 и добавлю GROUP BY uid, последняя запись не будет получена.

Любая идея будет принята с благодарностью.

1 Ответ

0 голосов
/ 30 марта 2020

Вы можете использовать коррелированный подзапрос:

select uid, itemDescription, date
from SEARCH s
where s.date BETWEEN '2020-03-01' AND '2020-03-30' and
      s.date = (select max(s2.date)
                from search s2
                where s2.uid = s.uid and
                      s2.date = s.date
               );

Для производительности вам нужен индекс на search(uid, date).

Вы также можете попробовать оконные функции:

select s.*
from (select s.*,
             row_number() over (partition by uid order by date desc) as seqnum
      from search s
      where .date between '2020-03-01' and '2020-03-30' 
     ) s
where seqnum = 1;
...