gpt4 book ai didi

mysql - 如何仅使用一个查询来执行当前税率选择?

转载 作者:行者123 更新时间:2023-11-30 23:07:55 24 4
gpt4 key购买 nike

这是我的税率表“历史”,其中 start_dateend_date 代表 value 适用的时间跨度(即没有1972-12-31 23:59:59之前的tax,2013-10-01 00:00:00开始的当前tax 22.00):

+-------+---------------------+---------------------+
| value | start_date | end_date |
+-------+---------------------+---------------------+
| NULL | NULL | 1972-12-31 23:59:59 |
| 12.00 | 1973-01-01 00:00:00 | 1977-02-07 23:59:59 |
| 14.00 | 1973-02-08 00:00:00 | 1980-07-02 23:59:59 |
| 15.00 | 1980-11-01 00:00:00 | 1982-08-04 23:59:59 |
| 18.00 | 1982-08-05 00:00:00 | 1988-07-31 23:59:59 |
| 19.00 | 1988-08-01 00:00:00 | 1997-09-30 23:59:59 |
| 20.00 | 1997-10-01 00:00:00 | 2011-09-16 23:59:59 |
| 21.00 | 2011-09-17 00:00:00 | 2013-09-30 23:59:59 |
| 22.00 | 2013-10-01 00:00:00 | NULL |
+-------+---------------------+---------------------+

如何执行单个查询,得到正确的值?

  • NULL 表示 1973-01-01 00:00:00 之前的任何日期
  • value start_dateend_date 之间的任何日期
  • 22.00 任何当前或 future 的日期

这将打破最后一个条件:

SELECT *
FROM tax_rate
WHERE NOW() BETWEEN start_date AND end_date

这将打破第一个条件:

SELECT *
FROM tax_rate
WHERE '1972-01-01' >= start_date
AND ('1972-01-01' <= end_date OR end_date IS NULL)
ORDER BY end_date IS NULL DESC, end_date DESC
LIMIT 1

我很确定这是一个常见问题,但我无法解决。

最佳答案

您可以显式比较NULL:

SELECT *
FROM tax_rate
WHERE (NOW() >= start_date or start_date is null) AND
(NOW() <= end_date or end_date is null);

但是,由于您的费率不重叠且没有差距,您可以根据 start_date 获取最后一个费率:

select *
from tax_rate
where NOW() >= start_date or start_date is null
order by coalesce(start_date, '1900-01-01') desc
limit 1;

关于mysql - 如何仅使用一个查询来执行当前税率选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21064250/

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