gpt4 book ai didi

MySQL:获取日期为 NULL 的行,或者如果存在则获取具有设置日期的行

转载 作者:行者123 更新时间:2023-11-29 14:05:45 25 4
gpt4 key购买 nike

我得到了一些产品价格的表格,我可以在其中设置一个价格,如果查询运行时没有其他有效价格,则该价格始终有效。

id | item_id | valid_from | valid_to   | price
---+---------+------------+------------+------
1 | 1337 | 2013-01-17 | 2013-01-18 | 35.50
2 | 1337 | NULL | NULL | 39.95
3 | 1337 | 2013-01-13 | 2013-01-18 | 36.00

我不知道如何获得 NOW() 的正确价格(今天为 35.50),需要一些帮助。如果有两个或多个价格在一段时间内有效,我希望获得稍后开始的价格。到目前为止我得到了:

SELECT price
FROM my_table
WHERE item_id = 1337
AND (
valid_from <= NOW() AND
valid_to >= NOW()
) OR (
id NOT IN (
SELECT id
FROM my_table
WHERE item_id = 1337
AND valid_from <= NOW()
AND valid_to >= NOW()
) AND
valid_from IS NULL AND
valid_to IS NULL
)
ORDER BY valid_from DESC
LIMIT 1

顺便说一句,我对这个表结构不太满意。如果您对此还有其他评论,我想阅读它们。非常感谢。

最佳答案

您可以将默认价格的日期值设置为非常小和很大,而不是设置为 NULL:使 valid_from = Jan 1, 1970 和 valid_to = Jan 1, 2038。然后这些记录将始终包含在内,但会获胜如果有其他替代价格,则不是唯一的价格。

问题变成如何对结果集进行排序,但这取决于您的业务规则。现在您正在按 valid_from 排序,并且您可以继续这样做。如果您想要最低价格,并且默认价格始终是最高价格,您可以按价格排序。否则,您可以按 NOW() 和价格日期边界之间的时间长度进行排序,并且最接近的日期获胜。正如我所说,这取决于您想如何在几个可能的竞争价格中进行选择。

关于MySQL:获取日期为 NULL 的行,或者如果存在则获取具有设置日期的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14383541/

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