Найти, если между датами есть какая-либо дата из списка дат? - PullRequest
2 голосов
/ 09 марта 2020

Я пытаюсь выяснить, существуют ли (выберите даты из public_holidays) даты между датами start_date и end_date.

Это будет выглядеть так:

select
id, name, start_date, end_date, 
case when (public_holidays = true) then number - 1 else number end as find_real_number
from my_table 

Пример данных:

ID Name Start_date End_Date Numbers
1  Mike  3/9/2020  4/9/2020   67
2  Rick  3/1/2020  3/6/2020   34
3  Simm  3/24/2020 3/28/2020   98
4  Lisa  3/27/2020  4/5/2020   103
5  Rosy  3/9/2020  4/9/2020   23

И некоторые ожидаемые результаты выборки:

ID Name Start_date End_Date Numbers
1  Mike  3/9/2020  4/9/2020   66
2  Rick  3/1/2020  3/6/2020   34
3  Simm  3/24/2020 3/28/2020   98
4  Lisa  3/27/2020  4/5/2020   102
5  Rosy  3/9/2020  4/9/2020   23

Поскольку мы предполагаем, что 1 апреля является праздничным c праздником, то число строк 1 и 4 получило минус на 1.

И пример публикуемого c праздничного представления, которое я создал:

Public_holidays    Dates
April fools     04/01/2020
Labour Day      05/01/2020
Random Day      07/24/2020

Однако, поскольку я строю запрос на метабазе, он не позволяет мне создавать таблицу. Все, что я сделал, это создал представление, в котором есть 2 столбца: «Publi c Holidays» и «Dates»

Кто-нибудь, возможно, может дать мне совет, как это сделать? Спасибо.

Ответы [ 2 ]

1 голос
/ 09 марта 2020

Попробуйте что-то вроде этого:

SELECT id, name, start_date, end_date,
       numbers - ( SELECT COUNT(*)  FROM holidays
                   WHERE dates BETWEEN t.start_date AND t.end_date ) AS numbers
FROM my_table AS t

Это предполагает, что ваши выходные находятся в таблице / представлении с именем holidays. Кроме того, он считает выходные дни между датами начала и окончания и вычитает его из numbers из my_table.

0 голосов
/ 09 марта 2020

Я думаю, что вы хотите проверить публичные c праздничные падения или нет между начальной и конечной датой.

, поэтому вы должны сравнить даты, как показано ниже:

select
id, name, start_date, end_date, 
case when ((CAST(start_date as date) < CAST(public_holiday_date as date) 
             and CAST(public_holiday_date as date) < CAST(end_date as date)) 
     then number - 1 else number end as find_real_number
from my_table

или

select
id, name, start_date, end_date, 
case when CAST(public_holiday_date as date) 
          between (CAST(start_date as date) and CAST(end_date as date) 
     then number - 1 else number end as find_real_number
from my_table 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...