Merge pull request 'fix2_next_available_episode' (#175) from fix2_next_available_episode into main
Reviewed-on: #175
This commit is contained in:
commit
a49bd6b08d
@ -1,29 +1,31 @@
|
|||||||
<!--% query_next_available_episode = '
|
<!--% query_next_available_episode = '
|
||||||
WITH next_id AS (
|
WITH RECURSIVE
|
||||||
SELECT id, id + 1 AS id_next, date as last_date
|
min_id AS (
|
||||||
FROM eps
|
SELECT max(id) AS start_id FROM eps WHERE date <= NOW()
|
||||||
WHERE eps.date > NOW()
|
|
||||||
),
|
),
|
||||||
free_slot AS (
|
max_id AS (
|
||||||
|
SELECT max(id) AS end_id FROM eps
|
||||||
|
),
|
||||||
|
cnt(x) AS (
|
||||||
|
SELECT start_id from min_id
|
||||||
|
UNION ALL
|
||||||
|
SELECT x+1 FROM cnt
|
||||||
|
WHERE x+1 <= (SELECT end_id FROM max_id)
|
||||||
|
),
|
||||||
|
first_empty AS (
|
||||||
SELECT
|
SELECT
|
||||||
last_date AS prev_date,
|
cnt.x AS id
|
||||||
CASE
|
FROM cnt
|
||||||
WHEN DAYOFWEEK(last_date) = 6
|
LEFT JOIN eps e ON cnt.x = e.id
|
||||||
THEN 3
|
WHERE e.id IS NULL
|
||||||
ELSE 1
|
|
||||||
END AS date_offset,
|
|
||||||
next_id.id_next AS empty_slot
|
|
||||||
FROM next_id
|
|
||||||
LEFT JOIN eps ON next_id.id_next = eps.id
|
|
||||||
WHERE eps.id IS NULL
|
|
||||||
ORDER BY next_id.id
|
|
||||||
LIMIT 1
|
|
||||||
)
|
)
|
||||||
SELECT
|
SELECT
|
||||||
empty_slot AS next_id,
|
fe.id as next_id,
|
||||||
ADDDATE(prev_date,date_offset) AS next_date,
|
(SELECT DATE(ADDDATE(e2.date,1)) from eps e2 where e2.id = fe.id-1) as next_date,
|
||||||
DATEDIFF(ADDDATE(prev_date,date_offset),NOW()) AS delta_days
|
DATEDIFF((SELECT ADDDATE(e3.date,1) from eps e3 where e3.id = fe.id-1),now()) AS delta_days
|
||||||
FROM free_slot
|
FROM first_empty AS fe
|
||||||
|
LEFT JOIN eps e1 ON fe.id = e1.id
|
||||||
|
LIMIT 1
|
||||||
'
|
'
|
||||||
%-->
|
%-->
|
||||||
<!--% query_latest_episodes = '
|
<!--% query_latest_episodes = '
|
||||||
|
@ -1,29 +1,31 @@
|
|||||||
<!--% query_next_available_episode = '
|
<!--% query_next_available_episode = '
|
||||||
WITH next_id AS (
|
WITH RECURSIVE
|
||||||
SELECT id, id + 1 AS id_next, date as last_date
|
min_id AS (
|
||||||
FROM eps
|
SELECT max(id) AS start_id FROM eps WHERE date <= date(\'now\')
|
||||||
WHERE eps.date > date(\'now\')
|
|
||||||
),
|
),
|
||||||
free_slot AS (
|
max_id AS (
|
||||||
|
SELECT max(id) AS end_id FROM eps
|
||||||
|
),
|
||||||
|
cnt(x) AS (
|
||||||
|
SELECT start_id from min_id
|
||||||
|
UNION ALL
|
||||||
|
SELECT x+1 FROM cnt
|
||||||
|
WHERE x+1 <= (SELECT end_id FROM max_id)
|
||||||
|
),
|
||||||
|
first_empty AS (
|
||||||
SELECT
|
SELECT
|
||||||
last_date AS prev_date,
|
cnt.x AS id
|
||||||
CASE
|
FROM cnt
|
||||||
WHEN strftime(\'%w\',last_date) = \'5\'
|
LEFT JOIN eps e ON cnt.x = e.id
|
||||||
THEN \'+3 days\'
|
WHERE e.id IS NULL
|
||||||
ELSE \'+1 days\'
|
|
||||||
END AS date_offset,
|
|
||||||
next_id.id_next AS empty_slot
|
|
||||||
FROM next_id
|
|
||||||
LEFT JOIN eps ON next_id.id_next = eps.id
|
|
||||||
WHERE eps.id IS NULL
|
|
||||||
ORDER BY next_id.id
|
|
||||||
LIMIT 1
|
|
||||||
)
|
)
|
||||||
SELECT
|
SELECT
|
||||||
empty_slot AS next_id,
|
fe.id as next_id,
|
||||||
DATE (prev_date, date_offset) AS next_date,
|
(SELECT date(eps.date,\'+1 day\') from eps where id = fe.id-1) as next_date,
|
||||||
printf(\'%i\',abs(julianday(DATE (prev_date, date_offset)) - julianday(\'now\') + 1)) AS delta_days
|
printf(\'%i\',abs(julianday((SELECT date(eps.date,\'+1 day\') from eps where id = fe.id-1)) - julianday(\'now\') + 1)) AS delta_days
|
||||||
FROM free_slot
|
FROM first_empty AS fe
|
||||||
|
LEFT JOIN eps e ON fe.id = e.id
|
||||||
|
LIMIT 1
|
||||||
'
|
'
|
||||||
%-->
|
%-->
|
||||||
<!--% query_latest_episodes = '
|
<!--% query_latest_episodes = '
|
||||||
|
Reference in New Issue
Block a user