根据到期时间获取行

根据到期时间获取行,第1张

根据到期时间获取行

首先,您需要一个表格将您的

category
价值观与价值观联系起来
duration
。您可以创建一个物理表,也可以使用这样的子查询来生成一个虚拟表。

   select 1 as category, 1 as duration UNIOn ALL   select 2,2 UNIOn ALL select 3,4 UNIOn ALL select 4,6

这将产生以下的小查询表。

|| *category* || *duration* ||||          1 ||          1 ||||          2 ||          2 ||||          3 ||          4 ||||          4 ||          6 ||

接下来,您需要

books
像这样将查找表加入到您的表中。该查询还可以包括一
expiration
列,如图所示。

select b.*,       d.duration,       FROM_UNIXTIME(unix_time) + INTERVAL d.duration HOUR expiration  from books b  join (select 1 as category, 1 as duration UNIOn ALL        select 2,2 UNIOn ALL select 3,4 UNIOn ALL select 4,6         ) d ON b.category = d.category

最后,您添加一个

WHERe
子句以过滤出未到期的行。

select b.*,          d.duration,         FROM_UNIXTIME(unix_time) + INTERVAL d.duration HOUR expiration  from books b  join (select 1 as category, 1 as duration UNIOn ALL        select 2,2 UNIOn ALL select 3,4 UNIOn ALL select 4,6         ) d ON b.category = d.category  where FROM_UNIXTIME(unix_time) + INTERVAL d.duration HOUR >= '2016-02-03 08:00:00'

在此示例中,我将其

2016-02-03 08:00:00
用作当前时间。您可以在生产系统中使用
NOW()

您也可以使用该子句的可扩展版本

where

   where unix_time >= UNIX_TIMESTAMP('2016-02-03 08:00:00' - INTERVAL d.duration HOUR)

最后,这是一种设计偏好,但是混合

DATETIME
和unix时间戳列有点奇怪。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5618331.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存