我正在尝试为表skucompetition
中的每个日期创建一个返回表creationdateformat
的所有价格的查询。
为了澄清,creationdateformat中包含以下日期:
creationdateformat
2010-10-25
2010-10-26
2010-11-10
2010-11-24
2010-11-25
skucompetition有这些价格:
sku creationdate price
PCR-BR2495112 2010-10-26 16:06:03 24.99
PCR-BR2495112 2010-11-10 13:01:43 27.99
PCR-BR2495112 2010-11-25 12:24:26 26.51
对于2010-10-25日期,它应该返回0,就像第一个价格存在之前一样。
对于2010-10-26日期,它应该返回24,99
对于2010-11-10和2010-11-24的日期,它应该返回27.99
对于2010-11-25日期,它应该返回26.51
等等。
如何才能最好地实现这一目标?
答案 0 :(得分:1)
这应该指向正确的方向......
根据您的示例数据判断,您需要在特定日期之前或之后 中查找最新记录。
您只对单个记录感兴趣,因此您应该limit选择第一条记录。
您可以简化之前或之后部分。 “今天之前或之后”的任何事情都与“明天之前”的事情相同。因此,您将在输入日期plus one day之前寻找任何内容。这简化了查询,因为您不必担心一天中的确切时间。
最后,为了确保您获得最新记录,您必须order记录。
在伪代码中它将是:
select the first record
from skucompetition
where creationdate is before (input date + one day)
order by creationdate so most recent record comes first
您应该处理在您的应用程序中返回0的特殊情况。如果您已正确构造查询,则它将不会匹配第一个日期之前的输入日期的任何记录。那时你的应用程序应该处理'return 0'的情况。
答案 1 :(得分:0)
我会创建一个查询:
确切的语法当然取决于您使用的RDBMS
答案 2 :(得分:0)
SELECT price FROM skucompetition
WHERE sku = "<sku>" AND DATE(creationdate) <= "<date>"
ORDER BY date DESC LIMIT 1
这将选择具有正确SKU且不早于“date”的第一条记录。如果没有,则返回NULL。