Подзапрос отсортирован по другой таблице - PullRequest
0 голосов
/ 10 июля 2020

Это дополнительный вопрос к Получить следующую запись в запросе . Но задача немного сложнее. Я попытался изменить запрос SQL, но мне не удалось выполнить задачу.

Если у нас есть две таблицы, одна называется Activity и имеет строки [ActivityCode и StartTime], а другая - «Студенты» имеет строки [Имя и идентификатор], например:

Name-----ID-----ActivityCode-----StartTime<BR>
Tom------123------Lunch------------1200<BR>
Tom------123------MathClass--------1300<BR>
Tom------123------EnglishClass-----1500<BR>
Tom------123------EndOfSchool------1700<BR>
Mary-----369-----Lunch------------1200<BR>
Mary-----369-----ScienceClass-----1300<BR>
Mary-----369-----EnglishClass-----1600<BR>
Mary-----369-----EndOfSchool------1700<BR>

И теперь я хочу сделать один SQL Запрос, который будет отображаться следующим образом:

Name-----ID------ActivityCode-----StartTime------EndTime<BR>
Tom------123---  Lunch------------1200-----------1300<BR>
Tom------123-----MathClass--------1300-----------1500<BR>
Tom------123-----EnglishClass-----1500-----------1700<BR>
Tom------123-----EndOfSchool------1700-----------1700<BR>
Mary-----369-----Lunch------------1200-----------1300<BR>
Mary-----369-----ScienceClass-----1300-----------1600<BR>
Mary-----369-----EnglishClass-----1600-----------1700<BR>
Mary-----369-----EndOfSchool------1700-----------1700<BR>

Я следую коду, кредиты на Густав:

SELECT 
    Activity.ActivityCode, 
    Activity.StartTime, 
    Nz((Select Top 1 StartTime 
        From Activity As T 
        Where T.StartTime > Activity.StartTime 
        Order By StartTime Asc),
        [StartTime]) AS EndTime, 
    CDate(TimeSerial(Val([EndTime])\100,Val([EndTime]) Mod 100,0)-
        TimeSerial(Val([StartTime])\100,Val([StartTime]) Mod 100,0)) AS Duration
FROM 
    Activity;

Я попытался изменить часть

Order By StartTime Asc

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

1 Ответ

1 голос
/ 10 июля 2020

Рассмотрим это SQL:

SELECT Students.ID, [Name], ActivityCode, StartTime,
Nz((Select Top 1 StartTime FROM Activity As T 
        WHERE T.StartTime > Activity.StartTime AND T.ID=Activity.ID
        ORDER BY StartTime Asc),Startime) AS EndTime, 
DateDiff("h",TimeSerial(StartTime/100,0,0),TimeSerial(EndTime/100,0,0)) AS Duration
FROM Students INNER JOIN Activity ON Students.ID=Activity.ID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...