我正在尝试创建一个查询,该查询返回表creationdateformat中每个日期的表skucompetition中的所有价格。
为澄清起见,creationdateformat中包含以下日期:
creationdateformat
2010-10-25
2010-10-26
2010-11-10
2010-11-24
2010-11-25skucompetition有以下价格:
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
诸若此类。
如何才能最好地实现这一点?
发布于 2010-11-25 22:36:36
这应该会给你指明正确的方向。
从您的示例数据判断,您正在查找特定日期之前或上的的最新记录。
您只对一条记录感兴趣,所以您应该将您的选择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”的情况。
发布于 2010-11-25 22:11:40
我将创建一个查询,该查询:
当然,确切的语法将取决于您使用的RDBMS
发布于 2010-11-25 22:36:09
SELECT price FROM skucompetition
WHERE sku = "<sku>" AND DATE(creationdate) <= "<date>"
ORDER BY date DESC LIMIT 1这将选择第一条具有正确SKU且不早于"date“的记录。如果没有,则返回NULL。
https://stackoverflow.com/questions/4277786
复制相似问题