Как включить дату последнего обновления при объединении трех таблиц с определенной суммой - PullRequest
0 голосов
/ 28 марта 2019

Используя SQL-сервер, у меня есть три таблицы:

Одна [AD] включает в себя список всех действий, выполняемых пользователем, включая идентификатор пользователя [UserID] и описания [Description], а также идентификаторописания сеанса относится к [SessionID], и когда действие было выполнено [Timestamp].

```
UserID   Description            Timestamp         SessionID
221 Completed action item   27/01/2019 10:43    202
221 Completed action item   08/03/2019 07:07    232
221 Completed action item   08/03/2019 07:07    232
221 Completed action item   08/03/2019 07:08    235
221 Completed action item   08/03/2019 07:08    236
221 Completed action item   08/03/2019 07:08    236
221 Completed action item   08/03/2019 07:12    237
221 Completed action item   08/03/2019 07:13    238
221 Completed action item   08/03/2019 07:14    239
221 Completed action item   08/03/2019 07:14    239
221 Completed action item   08/03/2019 07:15    233
221 Completed action item   08/03/2019 07:15    233
221 Completed action item   08/03/2019 07:16    240
202 Completed action item   27/03/2019 09:56    331
202 Completed action item   27/03/2019 09:56    331
202 Completed action item   27/03/2019 09:57    332
202 Completed action item   27/03/2019 09:57    332
202 Completed action item   27/03/2019 09:58    333
202 Completed action item   27/03/2019 09:58    333
202 Completed action item   27/03/2019 09:59    334
202 Completed action item   27/03/2019 09:59    334
202 Completed action item   27/03/2019 10:00    335
202 Completed action item   27/03/2019 10:01    336
202 Completed action item   27/03/2019 10:01    336
202 Completed action item   27/03/2019 10:02    337

```

Каждый сеанс связан с курсом.Я вижу ассоциацию во второй таблице [Сеансы].эта таблица содержит список всех курсов [CourseID] и какие сеансы связаны с каждым курсом [SessionID].

```
CourseID SessionID
46   202
62   232
62   235
72   331
72   332
73   333

Третья таблица содержит имя пользователя и адрес электронной почты.

```
    UserID   FirstName        Email
    202      Buddy            sample@gmail.com
    232      John             john@gmail.com
 ```

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

Моя выходная таблица включает в себя: CourseID, сумму отсчетов за сессию, UserID, имя пользователя и адрес электронной почты

Теперь я бы хотел, чтобы в каждую строку добавлялась последняя дата обновления строки.Поэтому, если пользователь проводит сеанс сегодня, сумма увеличивается (это работает), и в столбце даты будет показана сегодняшняя дата.

Я пытался использовать Макс (дата), но я получаю ошибки независимо от того, гдеЯ положил это.Я уверен, что это связано с местоположением в подзапросах.Я использовал Max ([Timestamp]) или пытался использовать

CAST([Timestamp] AS DATE) as 'Date'

, а затем использовал Max (), но безрезультатно.

Вот что у меня есть, без даты:

```
SELECT 
ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS id, 
id_user, 
u.[FirstName],
u.[Email], 
COURSEID, 
SUM(A) AS SESSIONS_DONE
FROM ( 
    SELECT  
        s.[CourseID] COURSEID
        ,count (distinct s.[SessionID]) as 'A'
        ,ad.[UserID] id_user
        FROM [Sessions] s, [AuditData] ad 
        WHERE s.[SessionID]=ad.[SessionID]
        AND ad.[Description]='Completed action item'
        GROUP BY CourseID, USERID 
        )sub
Join [Users] u on id_user=u.[UserID]
GROUP BY id, u.[FirstName], u.[Email], id_user, COURSEID, A
 --ORDER BY lastupdate
; 
```

, как вы можете видеть, в конечном итоге я хочу, чтобы результаты были в порядке даты. Пример результата должен выглядеть примерно так:

```
id | COURSEID | A | id_user | lastupdate
1  | 62       | 8 | 221     | 2019-03-03 07:16:19.920
2  | 72       | 7 | 202     | 2019-03-27 10:02:12.367
3  | 42       | 1 | 221     | 2019-03-27 10:43:31.717
```

Я могу получить первые четыре столбца (плюс имяи адрес электронной почты, не представленный в этой таблице), это последний, который я не знаю, как получить.Есть идеи?

1 Ответ

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

Я изо всех сил пытаюсь полностью истолковать ваш вопрос, но я думаю, что это то, что вам нужно?

Одна запись на пользователя на курс.Каждая запись с информацией о пользователе, идентификатором курса, количеством уникальных сеансов для этого курса и отметкой времени последнего сеанса этого курса?«», а не просто сессии, но не возвращает курсы, которые есть в таблице, но не имеют «Завершенный элемент действия».

Если вы хотите нули, вы можете захотеть это ...

SELECT
  u.*,
  c.CourseID,
  c.SessionCount,
  c.LastSessionTimestamp
FROM
  Users      AS u
INNER JOIN
(
  SELECT
    a.UserID,
    s.CourseID,
    SUM(a.hasCompletedActionItem      )  AS SessionCount,
    MAX(a.LastCompletedActionTimestamp)  AS LastSessionTimestamp
  FROM
  (
    SELECT
      UserID,
      SessionID,
      MAX(CASE WHEN Description = 'Completed action item' THEN 1  ELSE  0  END)  AS hasCompletedActionItem,
      MAX(CASE WHEN Description = 'Completed action item' THEN [Timestamp] END)  AS LastCompletedActionTimestamp,
      MAX([Timestamp])                                                           AS LastTimestamp
    FROM
      AuditData  AS a
    GROUP BY
      UserID,
      SessionID
  )
    a
  INNER JOIN
    Sessions   AS s
      ON s.SessionID = a.SessionID
  GROUP BY
    a.UserID,
    s.CourseID
)
  c
    ON u.UserID = c.UserID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...