首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取每个日期的最接近记录

获取每个日期的最接近记录
EN

Stack Overflow用户
提问于 2010-11-25 21:52:49
回答 3查看 893关注 0票数 0

我正在尝试创建一个查询,该查询返回表creationdateformat中每个日期的表skucompetition中的所有价格。

为澄清起见,creationdateformat中包含以下日期:

代码语言:javascript
复制
creationdateformat
2010-10-25
2010-10-26
2010-11-10
2010-11-24
2010-11-25

skucompetition有以下价格:

代码语言:javascript
复制
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

诸若此类。

如何才能最好地实现这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-25 22:36:36

这应该会给你指明正确的方向。

从您的示例数据判断,您正在查找特定日期之前或上的的最新记录。

您只对一条记录感兴趣,所以您应该将您的选择limit到第一条记录。

您可以在部件之前或之上简化。任何“今天之前”和“明天之前”都是一样的。因此,您将查找“在输入日期plus one day之前”的任何内容。这简化了查询,因为您不必担心一天中的确切时间。

最后,为了确保获得最新的记录,您必须对这些记录执行order操作。

在伪代码中,它将是:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2010-11-25 22:11:40

我将创建一个查询,该查询:

  • 将选择创建日期等于或晚于您正在查看的日期的所有记录
  • 将这些记录从最早的记录排序到最新的
  • ,然后使用"limit“仅返回第一条记录

当然,确切的语法将取决于您使用的RDBMS

票数 0
EN

Stack Overflow用户

发布于 2010-11-25 22:36:09

代码语言:javascript
复制
SELECT price FROM skucompetition
WHERE sku = "<sku>" AND DATE(creationdate) <= "<date>"
ORDER BY date DESC LIMIT 1

这将选择第一条具有正确SKU且不早于"date“的记录。如果没有,则返回NULL。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4277786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档