Мне нужен отдельный столбец и отображение разницы в количестве с предыдущим днем.
Данные предыдущего дня по дате получения.
Таблица №1:
Date Id
---------------
8/18/2024 2
8/19/2024 3
8/20/2024 4
8/21/2024 5
8/22/2024 6
Всего 20
Таблица №2 – сегодняшние данные:
Date Id
--------------
8/18/2024 2
8/19/2024 3
8/20/2024 4
8/21/2024 5
8/22/2024 6
8/23/2024 2
Общее количество = 22
Логика, как показано ниже
Date Id Date Id diff
------------------------------------------
8/18/2024 2 8/18/2024 2 0
8/19/2024 3 8/19/2024 3 0
8/20/2024 4 8/20/2024 4 0
8/21/2024 5 8/21/2024 5 0
8/22/2024 6 8/22/2024 6 0
8/23/2024 2 2
Мне нужно увидеть их в одной таблице, как показано ниже:
Date Id Diff
----------------------
8/18/2024 2 0
8/19/2024 3 0
8/20/2024 4 0
8/21/2024 5 0
8/22/2024 6 0
8/23/2024 2 2
Обратите внимание, что вам даже не нужна таблица 1, чтобы получить указанный результат. Просто верните разницу 0 для всех дат, кроме сегодняшней.
Что вам, вероятно, нужно, так это полное внешнее соединение двух таблиц.
Вопрос не совсем ясен, но вот как я его понял. Вам нужно соединить все строки двух таблиц, где в одной из них может быть больше строк, чем в другой. Задача — вычислить разницу между значениями столбца id. Поскольку нет инструкции, из каких данных таблицы вычитать и какие данные таблицы следует вычитать, я использовал функцию ABS(), чтобы показать абсолютную разницу двух столбцов идентификаторов.
-- S a m p l e D a t a :
/* yesterday's data */
Create Table tbl_1 ( a_date Date, id Int )
Insert Into tbl_1 ( a_date, id )
Select '2024-08-18', 2 Union All
Select '2024-08-19', 3 Union All
Select '2024-08-20', 4 Union All
Select '2024-08-21', 5 Union All
Select '2024-08-22', 6;
/* today's data */
Create Table tbl_2 ( a_date Date, id Int );
Insert Into tbl_2 ( a_date, id )
Select '2024-08-18', 2 Union All
Select '2024-08-19', 3 Union All
Select '2024-08-20', 4 Union All
Select '2024-08-21', 5 Union All
Select '2024-08-22', 6 Union All
Select '2024-08-23', 2;
-- S Q L :
Select t2.a_date as a_date_2, Coalesce(t2.id, 0) as id_2,
t1.a_date as a_date_1, Coalesce(t1.id, 0) as id_1,
ABS( Coalesce(t2.id, 0) - Coalesce(t1.id, 0) ) as diff
From tbl_2 t2
Full Outer Join tbl_1 t1 ON( t1.a_date = t2.a_date )
Order By Coalesce(t2.a_date, t1.a_date)
/* R e s u l t :
a_date_2 id_2 a_date_1 id_1 diff
---------- ---- ---------- ---- ----
2024-08-18 2 2024-08-18 2 0
2024-08-19 3 2024-08-19 3 0
2024-08-20 4 2024-08-20 4 0
2024-08-21 5 2024-08-21 5 0
2024-08-22 6 2024-08-22 6 0
2024-08-23 2 null 0 2 */
См. скрипку здесь.
Дополнение:
... и если вам нужен агрегированный результат...
WITH
grid as
( Select t2.a_date as a_date_2, Coalesce(t2.id, 0) as id_2,
t1.a_date as a_date_1, Coalesce(t1.id, 0) as id_1,
ABS( Coalesce(t2.id, 0) - Coalesce(t1.id, 0) ) as diff
From tbl_2 t2
Full Outer Join tbl_1 t1 ON( t1.a_date = t2.a_date )
)
Select Sum(id_2) as today, Sum(id_1) as yesterday, Sum(diff) as diff
From grid
/*
today yesterday diff
----- --------- ----
22 20 2 */
Обе таблицы находятся в одном источнике. В зависимости от полученной даты она будет меняться ежедневно, и для нее ведется подсчет идентификатора, так как же нам получить сегодняшний счет - вчерашний счет и получить разницу
@David Выберите Sum(id_2) как сегодня, Sum(id_1) как вчера, Sum(diff) как diff From (... sbove SQL в круглых скобках...);
Спасибо за помощь.
Вы можете UNION ALL
таблицы и суммировать (положительные) идентификаторы из таблицы 2 и отрицательные идентификаторы из таблицы 1:
select a_date, sum(id) diff
from
(
select a_date, id from tbl_2
union all
select a_date, -id from tbl_1
) dt
group by a_date;
Демо: https://dbfiddle.uk/GTlSKNRh (на основе скрипки @d r, спасибо!)
Если вы хотите схитрить и знаете, что таблицы всегда будут одинаковыми, за исключением того, что в таблице 2 есть еще один дополнительный, последний день:
select a_date,
case when a_date = max(a_date) over () then id else 0 end
from tbl_2
Обе таблицы находятся в одном источнике. В зависимости от полученной даты она будет меняться ежедневно, и для нее ведется подсчет идентификатора, так как же нам получить сегодняшний счет - вчерашний счет и получить разницу
Используя один из вопросов, найденных в ответах здесь!
«Мне нужно» — это не вопрос. Что вам мешает сделать то, что вам нужно? Что вы пробовали? Почему это не сработало? А что насчет содержания, которое вы прочитали перед публикацией этого вопроса, вы не поняли?