【问题标题】:Using SQL Commands to subtract 1 minute intervals from Date Column to return matched record使用 SQL 命令从日期列中减去 1 分钟间隔以返回匹配记录
【发布时间】:2016-09-12 15:34:58
【问题描述】:

我有一个数据库,在这个数据库中我有一个名为“Bakery”的表。在这个表中有两列,食物和时间。第一列 Food 代表生产的食物,然后第二列 Time 代表制作食物的时间。
示例

FOOD        TIME
Cookie      5:00 AM  
Cookie      5:10 AM  
Cookie      5:18 AM  
Cookie      5:30 AM  

如果我想创建一个 SQL 命令来查看最后一批食物的制作时间以及客户购买食物的时间,那么最好的方法是什么。

例子

约翰在早上 5 点 17 分买了一块饼干,最后一批为约翰制作的饼干是什么时候?

我希望结果返回凌晨 5:10。

我有数百个名字和不同的食物,那么最好的方法是什么?

【问题讨论】:

  • 您肯定不需要使用任何循环、if 语句或时间递减。您使用的是什么 DBMS(SQL Server、MySQL、Oracle 等)?
  • 你需要MAX 时间在那些小于“约翰”时间的人中)。
  • 只需按日期时间降序排序,然后选择日期时间
  • 您的查询应该是这样的(对于 DBMS,查询可能会有所不同):SELECT MAX(TIME) FROM Bakery WHERE TIME < @InputTime

标签: sql function if-statement while-loop


【解决方案1】:

我假设“输入”值是 BUYED_FOODcookie 即)和TIME_OF_BUYING5:17 即)。

SELECT DISTINCT ON (FOOD) * 
FROM Bakery
WHERE 
   FOOD = 'cookie' AND 
   TIME < TIME_OF_BUYING
ORDER BY FOOD, TIME DESC

这个例子是通用的,从Bakery 返回整行。如果您只想返回TIME,您可以将DISTINCT 部分和ORDER .. DESC 替换为MAX(TIME),如下所示:

SELECT MAX(TIME) 
FROM Bakery
WHERE 
   FOOD = 'cookie' AND 
   TIME < TIME_OF_BUYING

【讨论】:

  • 如果我只希望它返回一条记录而不是所有记录怎么办?
  • DISTINCT 使查询只返回一行FOOD 从一大堆通常查询只会返回WHERE 子句;在这种情况下,它适用于仅显示一个 - cookie - 行的 WHERE 部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
相关资源
最近更新 更多