【发布时间】:2013-10-15 04:20:20
【问题描述】:
我有两个相关的表,其中包含许多基于日期的记录。 我只需要选择基于特定日期的有效汇率。
这些是数据示例:
在 HEADERTABLE...
ID, PICKUP, DELIVERY, VALIDFROM, VALIDTO, COMMODITY, CARRIER 1, 纽约, 芝加哥, 01-OCT-13,31-OCT-13, 鞋类, DHL 2、纽约、芝加哥、20-OCT-13、31-OCT-13、鞋类、UPS 3、纽约、芝加哥、30-OCT-13、31-OCT-13、鞋类、DHL 4,纽约,芝加哥,30-OCT-13,31-OCT-13,木制品,DHL在线表上:
ID、HEADERTABLEID、RATEDESC、RATE 2325, 1, 交付, 1000 2354, 2, 交付, 1500 2355, 2, 税, 100 2355, 3, 交付, 1200 2356, 3, 税务, 110 2380, 4, 交付, 1000所以通过使用某个日期(下面的日期变量),我只需要显示一个选项。例如,如果 thedate=25-oct-13,那么要显示的记录是 Id 2(来自 headertable +linestable 中的链接汇率)
如果 thedate=10-oct-13,则显示选项 1。
如果 thedate=30-oct-13,则显示 2 条记录(Id 3 和 4)(区别在于 COMMODITY)
这是我正在使用的代码(我已经尝试了很多其他代码,但都没有运气),但显然缺少一些东西,因为它显示了所有记录。
感谢任何帮助。
SELECT * from schema1.headertable, schema1.linestable
WHERE headertable.Id= linestable.headertableId
AND headertable.Validfrom <= STR_TO_DATE('" & thedate & "','%Y-%m-%d')
AND headertable.Validto >= STR_TO_DATE('" & thedate & "','%Y-%m-%d')
AND headertable.PICKUP LIKE '%NEW YORK%'
AND headertable.DELIVERY LIKE '%CHICAGO%'
ORDER BY headertable.Validfrom DESC, linestable.Id DESC
【问题讨论】:
-
您在 HEADERTABLE 中有两条仅相差
VALIDFROM的记录。您没有明确说明这一点,但您似乎想要检索 最近VALIDFROM日期在thedate或之前的记录。对吗? -
是的,你是对的,我可能没有正确解释自己,我已经修改了问题以包括承运人。日期必须介于 validfrom 和 validto always 之间,而不是 on 或之前。