Select 通过比较日期和时间有条件地记录
Select record conditionally by comparing date and time
使用 SQLite,如何检索当前时间介于记录开始和停止时间之间的第一条记录,或者,如果当前时间超出所有现有记录的 start/stop 次,则取而代之的是检索记录在当前本地时间之后是下一个吗?
这是我的 table:
TABLE sessions (
session_id INTEGER PRIMARY KEY AUTOINCREMENT,
session_start REAL,
session_stop REAL,
group_id INTEGER REFERENCES [groups] (group_id) ON DELETE CASCADE
);
示例数据:
session_id session_start session_stop group_id
1 2459599.755438762 2459599.963772095 1
2 2459600.0471054283 2459600.1721054283 2
3 2459600.755438762 2459600.963772095 1
会话 table 有一个外键,group_id,但为了示例,我们可以将其放在一边。
编辑:
在小型测试应用程序中尝试了 mankowitz 的建议:
SQL.Text:='SELECT *, julianday(''Now'',''localtime'') AS julian_now FROM sessions '
+'WHERE session_start > julian_now '
+'ORDER BY session_stop < julian_now LIMIT 1';
运行时的当前时间是 2022-01-17 05:40:45,应该选择 session_id 16 的记录,因为它是最接近时间的。如何为此修改代码?
select * 来自 sesson_start>{currenttime} 的会话
按 session_end<{currenttime} 排序
限制 1
对于条件:
current time is between record start and stop times
您需要在 ORDER BY
子句中使用此布尔表达式:
julianday('now', 'localtime') BETWEEN session_start AND session_stop
条件:
OR ELSE, if current time is outside start/stop times of all existing
records, instead retrieve the record that comes next in time after
current local time
你需要这个:
julianday('now', 'localtime') > session_stop
这样写您的查询:
SELECT *
FROM sessions
ORDER BY julianday('now', 'localtime') BETWEEN session_start AND session_stop DESC,
julianday('now', 'localtime') > session_stop DESC,
session_start
LIMIT 1;
使用 SQLite,如何检索当前时间介于记录开始和停止时间之间的第一条记录,或者,如果当前时间超出所有现有记录的 start/stop 次,则取而代之的是检索记录在当前本地时间之后是下一个吗?
这是我的 table:
TABLE sessions (
session_id INTEGER PRIMARY KEY AUTOINCREMENT,
session_start REAL,
session_stop REAL,
group_id INTEGER REFERENCES [groups] (group_id) ON DELETE CASCADE
);
示例数据:
session_id session_start session_stop group_id
1 2459599.755438762 2459599.963772095 1
2 2459600.0471054283 2459600.1721054283 2
3 2459600.755438762 2459600.963772095 1
会话 table 有一个外键,group_id,但为了示例,我们可以将其放在一边。
编辑:
在小型测试应用程序中尝试了 mankowitz 的建议:
SQL.Text:='SELECT *, julianday(''Now'',''localtime'') AS julian_now FROM sessions '
+'WHERE session_start > julian_now '
+'ORDER BY session_stop < julian_now LIMIT 1';
运行时的当前时间是 2022-01-17 05:40:45,应该选择 session_id 16 的记录,因为它是最接近时间的。如何为此修改代码?
select * 来自 sesson_start>{currenttime} 的会话 按 session_end<{currenttime} 排序 限制 1
对于条件:
current time is between record start and stop times
您需要在 ORDER BY
子句中使用此布尔表达式:
julianday('now', 'localtime') BETWEEN session_start AND session_stop
条件:
OR ELSE, if current time is outside start/stop times of all existing records, instead retrieve the record that comes next in time after current local time
你需要这个:
julianday('now', 'localtime') > session_stop
这样写您的查询:
SELECT *
FROM sessions
ORDER BY julianday('now', 'localtime') BETWEEN session_start AND session_stop DESC,
julianday('now', 'localtime') > session_stop DESC,
session_start
LIMIT 1;