У меня есть таблица, которая выглядит так:
ID Subid Time Value Value2
1 1 3 100 2
1 1 4 100 2
2 2 3 200 1
2 2 4 200 2
4 4 4 10 4
5 6 3 10 2
5 6 4 12 2
То, что я хочу сделать сейчас, это просто показать записи, где есть разница от времени 3 к времени 4. Таким образом, результат должен выглядеть следующим образом:
ID Subid Time Value Value2
2 2 3 200 1
2 2 4 200 2
4 4 4 10 4
5 6 3 10 2
5 6 4 12 2
Условия записи во второй части следующие:
Если есть две записи с одинаковыми идентификатором и Subid, но с другим месяцем, проверьте, равны ли значения и значения2. Если они ОБА равны, удалите запись, иначе покажите запись.
Если совпадения не найдены в другое время, также покажите запись.
Как правило, в этой таблице будет много записей, которые соответствуют друг другу, поэтому я хочу упростить свою жизнь, разбрав их.
Я должен использовать MS Access (2010) для этого.
Спасибо за вашу помощь.
РЕДАКТИРОВАТЬ после ответа Рему:
Теперь у меня проблема в том, что у меня нет таблицы, показанной выше, но я создаю ее с помощью другого запроса. Так что сейчас я просто поместил запрос для создания этой таблицы в четырех местах, где его использует Рему ... Я уверен, что есть лучший способ сделать это, но я не могу понять это ...
SELECT t2.*</p>
<p>FROM
(SELECT t.ID, t.SubID, t.Time, t.Value, t.value2, t.value
FROM </p>
<p>(
HUGE SELECT HERE with 3 joins) t</p>
<pre><code> WHERE t.Time=4) AS t2
LEFT JOIN
(SELECT t.ID, t.SubID, t.Time, t.Value, t.value2, t.value
FROM
(
ОГРОМНЫЙ ВЫБРАТЬ ЗДЕСЬ с 3 соединениями) т
WHERE t.Time=3) AS t1
ON t2.Id = t1.Id
WHERE t2.value<>t1.value
OR t2.value2<>t1.value2
OR t1.Id Is Null
UNION ALL
SELECT t1.* FROM
(SELECT t.ID, t.SubID, t.Time, t.Value, t.value2, t.value
FROM
(
ОГРОМНЫЙ ВЫБРАТЬ ЗДЕСЬ с 3 соединениями) t
WHERE t.Time=3) AS t1
LEFT JOIN
(SELECT t.ID, t.SubID, t.Time, t.Value, t.value2, t.value
FROM
(
ОГРОМНЫЙ ВЫБРАТЬ ЗДЕСЬ с 3 соединениями) t
WHERE t.Time=4) AS t2
ON t1.Id=t2.Id
WHERE t1.value<>t2.value
OR t1.value2<>t2.value2
OR t2.Id Is Null
ORDER BY Id, EntryNo;