Как запросить весь идентификатор первой таблицы с последним событием и первой датой во второй таблице, связанной один-ко-многим с первой?

Я пытаюсь получить из двух таблиц, связанных один ко многим (Subattivita.ID-Eventi-IDSubattivita), некоторые поля из первой таблицы и два других поля из второй таблицы (последний Eventi.Evento и первый Eventi.DataInserimento).

Я не знаю, почему я получаю сообщение об ошибке при следующем запросе SQL. Может кто-нибудь помочь, пожалуйста?

Первая таблица: Субаттивита

ИДЕНТИФИКАТОР Контенуто 1 Прова 2 Прова2 3 Прова3 4 прова4 5 Прова5 6 Прова6 7 прова7 9 Реализовать дизайн 10 Прова8

Вторая таблица: Эвенти

ИДЕНТИФИКАТОР ИДСубаттивита Эвенто Комменто Инсерименто данных 1 1 Аперта Автоматическая установка 08.01.2024 2 2 Аперта Автоматическая установка 08.01.2024 3 3 Аперта Автоматическая установка 08.01.2024 4 4 Аперта Автоматическая установка 08.01.2024 5 5 Аперта Автоматическая установка 08.02.2024 8 6 Аперта Автоматическая установка 08.02.2024 9 7 Аперта Автоматическая установка 08.02.2024 12 9 Аперта Автоматическая установка 08.02.2024 13 10 Аперта Автоматическая установка 08.02.2024 14 1 Примечания Тесто1 08.05.2024 15 2 Примечания Тесто2 08.05.2024 16 3 Примечания Тесто3 08.06.2024 17 4 Примечания Тесто4 08.06.2024 18 5 Примечания Тесто5 08.07.2024 19 6 Примечания Тесто8 08.08.2024 20 7 Примечания Тесто9 08.09.2024 21 9 Примечания Тесто12 08.09.2024 22 9 Примечания Procedi con designo. 08.09.2024 23 9 Кариката Disegno карикато. 08.09.2024 24 9 Кьюза Одобрено дизайн 08.09.2024

Требуемые результаты запроса:

ИДЕНТИФИКАТОР LastEvento FirstDataInserimento 1 Примечания 08.01.2024 2 Примечания 08.01.2024 3 Примечания 08.01.2024 4 Примечания 08.01.2024 5 Примечания 08.02.2024 6 Примечания 08.02.2024 7 Примечания 08.02.2024 9 Кьюза 08.02.2024 10 Аперта 08.02.2024

Я попробовал выполнить следующий SQL-запрос, но Access просит ввести значение u.Evento:

SELECT 
    t.ID, 
    u.Evento as LastEvento, 
    p.DataInserimento as FirstDataInserimento
FROM 
    ((Subattivita t
INNER JOIN 
    (SELECT IDSubattivita, MAX(ID) as MaxID FROM Eventi GROUP BY IDSubattivita) u ON t.ID = u.IDSubattivita)
INNER JOIN 
    (SELECT IDSubattivita, MIN(ID) as MinID FROM Eventi GROUP BY IDSubattivita) p ON t.ID = p.IDSubattivita);

Если вы получили ошибку, поделитесь этой ошибкой.

Evert 21.08.2024 00:52

КАКУЮ ошибку вы получаете? Я сразу вижу, что ваша таблица p не содержит поля DataInserimento, а ваша таблица u не содержит поля Evento. Оба они содержат только два столбца.

Tim Roberts 21.08.2024 00:52

Я внес некоторые изменения и добавил сообщение о доступе.

Luca 21.08.2024 01:20
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это не сообщение об ошибке. Это запрос на ввод значения, поскольку запрос ссылается на поля, отсутствующие в наборе данных, как отметил @TimRoberts. Похоже, вам нужен Min(DataInserimento) для каждого IDSubattivita. Вытащить Evento, связанное с максимальным ID для каждого IDSubattivita, сложнее. Учитывать:

SELECT Q.IDSubattivita, Evento AS LastEvento, FirstDataInserimento FROM Eventi INNER JOIN 
    (SELECT Eventi.IDSubattivita, Max(Eventi.ID) AS EID, 
     Min(Eventi.DataInserimento) AS FirstDataInserimento FROM Eventi
     GROUP BY Eventi.IDSubattivita) AS Q 
ON Eventi.ID=Q.EID;

Или эта версия:

SELECT Subattivita.ID, Contenuto, 
   (SELECT TOP 1 Evento FROM Eventi AS Dup 
    WHERE IDSubattivita=Subattivita.ID ORDER BY ID DESC) AS LastEvento, 
   (SELECT TOP 1 DataInserimento FROM Eventi AS Dup WHERE 
    IDSubattivita=Subattivita.ID ORDER BY ID) AS FirstDataInserimento
FROM Subattivita;

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

Luca 21.08.2024 15:03

(Я предпочитаю второй вариант) Спасибо!

Luca 21.08.2024 15:04

Другие вопросы по теме