sqlite - 当值来自多个表时,如何在SQLite中使用WHERE BETWEEN子句?

标签 sqlite where-clause

我有以下表格(包括完整的架构,但是只有TIME值是必需的:

“要点”表

     TSTAMP,                 LAT,   LON,     HDOP,    ALT,     FILE,        EUID
    "2015-12-15T20:29:54"   "0.0"   "0.0"   "99.99" "NULL"  "L151400.GPS"   "080D55"
    "2015-12-15T20:29:55"   "0.0"   "0.0"   "99.99" "NULL"  "L151400.GPS"   "080D55"
    "2015-12-15T20:29:56"   "0.0"   "0.0"   "99.99" "NULL"  "L151400.GPS"   "080D55"


“音频”表

START,                  STOP,                    NCHANNELS,     SAMPWIDTH,  FRAMERATE, NFRAMES, COMPTYPE, COMPNAME, FILE, FILESIZE, EUID
"2015-12-15T22:37:00"   "2015-12-15T22:39:53"   "1.0"   "2.0"   "16000.0"   "2777088.0" "NONE"  "not compressed"    "static/uploads/WAV/L151637.WAV"    "5554688.0"
"2015-12-15T22:27:00"   "2015-12-15T22:37:00"   "1.0"   "2.0"   "16000.0"   "9601024.0" "NONE"  "not compressed"    "static/uploads/WAV/L151627.WAV"    "19202560.0"
"2015-12-15T22:17:00"   "2015-12-15T22:27:00"   "1.0"   "2.0"   "16000.0"   "9601024.0" "NONE"  "not compressed"    "static/uploads/WAV/L151617.WAV"    "19202560.0"


我需要在POINTS表中找到具有TSTAMP的每个记录,该记录位于AUDIO表的任何START / STOP对之间。

到目前为止,我已经尝试了以下迭代:

SELECT FILE FROM POINTS 
WHERE (
TSTAMP
BETWEEN (SELECT START FROM AUDIO) AND 
(SELECT STOP FROM AUDIO)
);


返回0。我知道此数据已排​​列好,并且给出正确的搜索语句,我应该返回多条记录。但是,我似乎找不到任何有关如何解决在一个搜索语句中从多个表中提取列的引用。

我知道我可以在Python中将它们组合在一起,但是对于SQL来说,这似乎是正常的工作。

仍然习惯于使用SQL,因此请在回答中明确说明。
谢谢

最佳答案

在POINTS表中查找包含TSTAMP的任何记录,该记录位于AUDIO表的任何START / STOP对之间。您可以使用以下查询。另外,请不要使用start作为列名,这是sqlite中的关键字。我用sta你可以改变列名。

选择STA,STOP,
(从POINTS中选择GROUP_CONCAT(POINTS.FILE),其中datetime(AUDIO.STA)和datetime(AUDIO.STOP)之间的datetime(POINTS.TSTAMP)表示为FIL
从AUDIO
从AUDIO

这将返回逗号分隔的范围内将出现的数据列表。我还使用了以下数据来检查

AUDIO
    STA                        STOP  
"2015-12-15T22:37:00"   "2015-12-15T22:39:53"
"2015-12-15T22:27:00"   "2015-12-15T22:37:00"
"2015-12-15T22:17:00"   "2015-12-15T22:27:00"

POINTS
     TSTAMP                 FILE 
"2015-12-15T22:29:54"   "L151400.GPS"
"2015-12-15T22:29:55"   "L151400.GPS"
"2015-12-15T22:29:56"   "L151400.GPS"

And following is the result
   STA                      STOP              FIL                       
"2015-12-15T22:37:00" "2015-12-15T22:39:53" "NULL"

"2015-12-15T22:27:00" "2015-12-15T22:37:00" "L151400.GPS,L151400.GPS,L151400.GPS"

"2015-12-15T22:17:00"   "2015-12-15T22:27:00"   "NULL"


谢谢

关于sqlite - 当值来自多个表时,如何在SQLite中使用WHERE BETWEEN子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34304629/

相关文章:

where-clause - mysql wherein子句中的最大值

android - 显示特定行的值

python-3.x - 导入错误 : No module named 'pysqlite2' when running tests in Python 3 Ubuntu

database - SQLite3 的线程安全性如何?

mysql - 索引搜索是否适用于带有按位运算的 where 子句?

Android sqlite - 如何管理 where 子句中的整数值

performance - 具有多个 WHERE 等式的 Postgresql CREATE TABLE AS

php - MySQL 左连接计数与条件

java - 如何使用 rawquery 在 Room Library 中创建表?

python - Python 中 sqlite3 的交集