Подсчитайте разницу между двумя полученными датами для конкретного идентификатора

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

Данные предыдущего дня по дате получения.

Таблица №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

«Мне нужно» — это не вопрос. Что вам мешает сделать то, что вам нужно? Что вы пробовали? Почему это не сработало? А что насчет содержания, которое вы прочитали перед публикацией этого вопроса, вы не поняли?

Thom A 23.08.2024 18:46

Обратите внимание, что вам даже не нужна таблица 1, чтобы получить указанный результат. Просто верните разницу 0 для всех дат, кроме сегодняшней.

jarlh 23.08.2024 19:15
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
5
2
67
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Что вам, вероятно, нужно, так это полное внешнее соединение двух таблиц.
Вопрос не совсем ясен, но вот как я его понял. Вам нужно соединить все строки двух таблиц, где в одной из них может быть больше строк, чем в другой. Задача — вычислить разницу между значениями столбца 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 23.08.2024 21:13

@David Выберите Sum(id_2) как сегодня, Sum(id_1) как вчера, Sum(diff) как diff From (... sbove SQL в круглых скобках...);

d r 23.08.2024 21:49

Спасибо за помощь.

David 27.08.2024 21:36

Вы можете 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

Обе таблицы находятся в одном источнике. В зависимости от полученной даты она будет меняться ежедневно, и для нее ведется подсчет идентификатора, так как же нам получить сегодняшний счет - вчерашний счет и получить разницу

David 23.08.2024 21:16

Используя один из вопросов, найденных в ответах здесь!

jarlh 23.08.2024 21:35

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