gpt4 book ai didi

python - SQL - 查找与当前日期匹配的条目

转载 作者:行者123 更新时间:2023-11-29 13:35:26 25 4
gpt4 key购买 nike

下表(我们将其命名为validity_period):

-------------------------------id | valid_from  | valid_until-------------------------------1    2012-11-12    2012-12-022    2012-12-03    NULL3    2012-12-15    2012-12-21

(valid_from is not nullable; valid_until is nullable, but don't have to be null)

Now I want to find out which entry is valid today (2012-12-19). From the logical sight of view it has to be entry 3, because the entries can overlap each other but only one entry is valid on one day. (On 2012-12-22 it has to be entry 2 which is valid.)
Note that all entries can have a valid_until, but there can't be more than one entry where valid_until is NULL.

How would I perform this in a SQL-Query? (If possible in SQLAlchemy, but I also can translate it myself from raw SQL)

(I'm using PostgreSQL 9.1)

EDIT: Here my final resolution. Thanks to all contributors!

SELECT * 
FROM validity_period
WHERE valid_from <= CURRENT_DATE AND
valid_until >= CURRENT_DATE
UNION
SELECT *
FROM validity_period
WHERE valid_from <= CURRENT_DATE AND
valid_until IS NULL
ORDER BY valid_from DESC
LIMIT 1;

最佳答案

您可以使用 WINDOW 函数(例如滞后或超前)来引用上一条/下一条记录,并限制“打开”间隔:

DROP SCHEMA tmp CASCADE;
CREATE SCHEMA tmp ;
SET search_path=tmp;

CREATE TABLE daterange
( id INTEGER NOT NULL
, valid_from DATE NOT NULL
, valid_until DATE
);
INSERT INTO daterange (id, valid_from, valid_until) VALUES
(1, '2012-11-12', '2012-12-02' )
,(2, '2012-12-03', NULL)
,(3, '2012-12-15', '2012-12-21' )
,(4, '2012-12-22', NULL )
;

-- The CTE is for convenience; could be a subquery or view
WITH magic AS (
SELECT dr.id
, dr.valid_from
, COALESCE(dr.valid_until , lead(valid_from) OVER ww) AS valid_until
FROM daterange dr
WINDOW ww AS (ORDER BY dr.valid_from )
)
SELECT *
FROM magic ma
WHERE now() BETWEEN ma.valid_from AND ma.valid_until
;

关于python - SQL - 查找与当前日期匹配的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13957732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com