sql - LIMIT 1的替代方案,以提取日期范围以及前后的第一个条目?

标签 sql sqlite union limit

基本上,我想在一个范围内+在此之后输入1,在之前输入1。

我这样尝试过:

SELECT DateTime, value FROM ReadingGlucoseBlood WHERE DateTime BETWEEN '2011-01-21 00:00:00' AND datetime('2011-01-21 00:00:00', '+24 hours') 
UNION 
SELECT DateTime, value FROM ReadingGlucoseBlood WHERE DateTime < '2011-01-21 00:00:00' LIMIT 1
UNION
SELECT DateTime, value FROM ReadingGlucoseBlood WHERE DateTime > datetime('2011-01-21 00:00:00', '+24 hours') LIMIT 1
ORDER BY DateTime ASC


但是事实证明,在复合SELECT语句的末尾只能有一个LIMIT。那么如何实现这种效果? (使用sqlite btw)

最佳答案

您需要对LIMIT进行子查询以限制其范围

SELECT DateTime, value FROM ReadingGlucoseBlood WHERE DateTime BETWEEN '2011-01-21 00:00:00' AND datetime('2011-01-21 00:00:00', '+24 hours') 
UNION ALL
SELECT * FROM (
SELECT DateTime, value FROM ReadingGlucoseBlood WHERE DateTime < '2011-01-21 00:00:00'
ORDER BY DateTime DESC LIMIT 1
) X
UNION ALL
SELECT * FROM (
SELECT DateTime, value FROM ReadingGlucoseBlood WHERE DateTime > datetime('2011-01-21 00:00:00', '+24 hours')
ORDER BY DateTime ASC LIMIT 1
) Y
ORDER BY DateTime ASC

关于sql - LIMIT 1的替代方案,以提取日期范围以及前后的第一个条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5508741/

相关文章:

android - 添加新表 onUpgrade android

sqlite - 如何从 SQLite 数据库导入?

python - 在 SQLite 数据库中存储 XML/HTML 文件——可能吗?

MySQL 'union all' 未带回第二个 select 语句的信息

java - 二维数组中的联合查找 (Java)

java - 如何在数组列表中插入每 10 行?

sql - 在 sql 中的聚合函数中捕获空警告

sql - 分解整数范围以加入 SQL

mysql - 从 MySQL 迁移后查询中的 PostgreSQL 分组错误

mysql - 使用 UNION ALL 时如何简化此 MySQL 查询?