首先,您需要一个表格将您的
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时间戳列有点奇怪。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)