背景

在商品配置中设置有售卖时间,同一个商品可以设置多组不同的售卖时间,其中开始时间必填,结束时间可以不填,但是同一时刻只会有一个正在生效的时间区间。

现在要求我们针对时间进行过滤,查询出当前正在生效的时间配置,和将来会生效的时间配置。

分情况

要筛选出以上数据我们可以分为两种情况

1.将来生效的配置:start_time > now()

2.正在生效的配置:这里面根据结束时间是否设置为空我们可以分为两种情况

  2.1   配置了结束时间:start_time <= now() < end_time

  2.2  没有配置结束时间:当前时间大于开始时间(可能会过滤出多组配置),在这些配置中取最大的开始时间的那组配置。

SQL

SELECT
*
FROM
sku_sale_time_config
WHERE
(
start_time > (UNIX_TIMESTAMP() * 1000)
)
OR (
end_time IS NOT NULL
AND start_time <= (UNIX_TIMESTAMP() * 1000)
AND (UNIX_TIMESTAMP() * 1000) < end_time
)
OR (
id IN (
SELECT
a.id
FROM
sku_sale_time_config a
INNER JOIN (
SELECT
sku_id,
max(start_time) AS start_time
FROM
sku_sale_time_config
WHERE
end_time IS NULL
AND start_time <= (UNIX_TIMESTAMP() * 1000)
GROUP BY
sku_id
) b ON a.sku_id = b.sku_id
AND a.start_time = b.start_time
)
)

  

本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。


mysql在开始与结束时间过滤出有效的价格且结束时间可以为空_UNIX

作者:​​翎野君​

如果您喜欢或希望看到更多我的文章,可扫描二维码关注我的微信公众号《翎野君》。

转载文章请务必保留出处和署名,否则保留追究法律责任的权利。