我正在尝试创建一个查询,返回表 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
等等。
如何才能最好地实现这一目标?
最佳答案
这应该为您指明正确的方向......
从您的示例数据来看,您正在查找特定日期之前或的最新记录。
您只对一条记录感兴趣,所以您应该 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”情况。
关于sql - 获取每个日期最接近的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4277786/