SQLite 比较两个连续行之间的日期
SQLite compare dates between two consecutive rows
我有 table 个媒体文件:
id title date
日期是纪元格式,比如我有3张照片:
1 xxxxx 1644777107349(6:31:47.349)
2 wwwww 1644777110138(6:31:50.138)
3 zzzzz 1644777117453(6:31:57.453)
我想获取间隔为 5 到 30 秒的照片的数量,例如:
2 和 3 的间隔是 7 秒,所以我想得到 2。我想将每一行与连续的行进行比较。
这是 SQL 查询:
SELECT Count(*)
FROM (SELECT A._id
FROM media_files A
INNER JOIN media_files B
ON( Abs(A.added_time - B.added_time) >= 5000 )
AND A._id != B._id
AND A.type = 'image'
AND B.type = 'image'
WHERE Abs(A.added_time - B.added_time) <= 30000
GROUP BY A._id)
对于上面的例子,我总是得到 3 而不是 2,知道问题出在哪里吗?
这是一个测试设置和一个查询,其中 returns 仅在前一个 one.NB 之后 5 到 30 秒之间拍摄的图像我正在处理 mySQL 所以我有放5和30秒可能是在SQLlite中你需要放5000和30000.
CREATE TABLE media_files (
id INT,
title VARCHAR(25),
added_date DATETIME,
type VARCHAR(25)
);
INSERT INTO media_files VALUES ( 1, 'xxxxx', '2022-02-13 6:30:47.349','image');
INSERT INTO media_files VALUES ( 1, 'xxxxx', '2022-02-13 6:31:27.349','image');
INSERT INTO media_files VALUES ( 1, 'xxxxx', '2022-02-13 6:31:47.349','image');
INSERT INTO media_files VALUES ( 2, 'wwwww', '2022-02-13 6:31:50.138','image');
INSERT INTO media_files VALUES ( 3, 'zzzzz', '2022-02-13 6:31:57.453','image');
SELECT id,
added_date ad,
added_date -
( SELECT MAX(added_date)
FROM media_files m
WHERE m.added_date < mf.added_date ) DIF
FROM media_files mf
WHERE ( added_date -
( SELECT MAX(added_date)
FROM media_files m
WHERE m.added_date < mf.added_date )) > 5
AND ( added_date -
( SELECT MAX(added_date)
FROM media_files m
WHERE m.added_date < mf.added_date )) < 30;
id | ad | DIF
-: | :------------------ | --:
1 | 2022-02-13 06:31:47 | 20
3 | 2022-02-13 06:31:57 | 7
我有 table 个媒体文件:
id title date
日期是纪元格式,比如我有3张照片:
1 xxxxx 1644777107349(6:31:47.349)
2 wwwww 1644777110138(6:31:50.138)
3 zzzzz 1644777117453(6:31:57.453)
我想获取间隔为 5 到 30 秒的照片的数量,例如: 2 和 3 的间隔是 7 秒,所以我想得到 2。我想将每一行与连续的行进行比较。
这是 SQL 查询:
SELECT Count(*)
FROM (SELECT A._id
FROM media_files A
INNER JOIN media_files B
ON( Abs(A.added_time - B.added_time) >= 5000 )
AND A._id != B._id
AND A.type = 'image'
AND B.type = 'image'
WHERE Abs(A.added_time - B.added_time) <= 30000
GROUP BY A._id)
对于上面的例子,我总是得到 3 而不是 2,知道问题出在哪里吗?
这是一个测试设置和一个查询,其中 returns 仅在前一个 one.NB 之后 5 到 30 秒之间拍摄的图像我正在处理 mySQL 所以我有放5和30秒可能是在SQLlite中你需要放5000和30000.
CREATE TABLE media_files ( id INT, title VARCHAR(25), added_date DATETIME, type VARCHAR(25) ); INSERT INTO media_files VALUES ( 1, 'xxxxx', '2022-02-13 6:30:47.349','image'); INSERT INTO media_files VALUES ( 1, 'xxxxx', '2022-02-13 6:31:27.349','image'); INSERT INTO media_files VALUES ( 1, 'xxxxx', '2022-02-13 6:31:47.349','image'); INSERT INTO media_files VALUES ( 2, 'wwwww', '2022-02-13 6:31:50.138','image'); INSERT INTO media_files VALUES ( 3, 'zzzzz', '2022-02-13 6:31:57.453','image');
id | ad | DIF -: | :------------------ | --: 1 | 2022-02-13 06:31:47 | 20 3 | 2022-02-13 06:31:57 | 7SELECT id, added_date ad, added_date - ( SELECT MAX(added_date) FROM media_files m WHERE m.added_date < mf.added_date ) DIF FROM media_files mf WHERE ( added_date - ( SELECT MAX(added_date) FROM media_files m WHERE m.added_date < mf.added_date )) > 5 AND ( added_date - ( SELECT MAX(added_date) FROM media_files m WHERE m.added_date < mf.added_date )) < 30;