Нужен запрос для извлечения отдельных данных из таблицы в моем sql - PullRequest
1 голос
/ 21 апреля 2020

У меня есть таблица History, которая содержит следующие столбцы:

ID   Previous  Current  User     createdOn
1    RED       BLUE     System   2020-04-14 09:24:49.765000
2    GREEN     YELLOW   ADMIN    2020-04-12 03:56:34.765000
3    GREEN     BLUE     System   2020-04-14 11:37:21.765000
4    ORANGE    RED      System   2020-04-15 11:24:49.765000

Мне нужен запрос для извлечения данных из таблицы таким образом, чтобы каждый пользователь возвращал только одну строку за день, даже если пользователь имеет более одной записи за день

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

User       CreatedOn
ADMIN      2020-04-12 03:56:34.765000
System     2020-04-14 09:24:49.765000
System     2020-04-15 11:24:49.765000

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Вы можете группировать по Пользователю и дате и получить минимум createdOn для каждого пользователя:

select User, min(createdOn) createdOn
from History
group by User, date(createdOn)

См. демо . Результаты:

| User   | createdOn                  |
| ------ | -------------------------- |
| ADMIN  | 2020-04-12 03:56:34.765000 |
| System | 2020-04-14 09:24:49.765000 |
| System | 2020-04-15 11:24:49.765000 |
0 голосов
/ 21 апреля 2020

Вы можете вернуть самую последнюю запись, например:

select h.*
from history h
where h.createdOn = (select max(h2.createdOn)
                     from history h2
                     where h2.user = h.user and
                           h2.createdOn >= date(h.createdOn) and
                           h2.createdOn < date(h.createdOn) + interval 1 day
                    );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...