所以我是一个SQL noobie,我想组织一个在SQLite中包含元数据和数据的结构化数据库。我不知道该怎么做,我在不同的网站环顾四周,但我没有找到任何有用的东西。
基本上我想要的是这样的(使用不同的数据采集站作为例子):
SQL TABLE:
然后以某种方式,当我查询此表并希望查看有关特定站数据的信息时,我将能够提取看起来像这样的数据:
datetime data
1/1/1980 11.6985
1/2/1980 43.6431
1/3/1980 54.9089
1/4/1980 63.1225
1/5/1980 72.4399
1/6/1980 79.1363
1/7/1980 82.2778
1/8/1980 86.0785
1/9/1980 86.8612
1/10/1980 84.3342
1/11/1980 80.4646
1/12/1980 77.1508
1/13/1980 74.827
1/14/1980 73.387
1/15/1980 72.1774
1/16/1980 71.6423
由于我对表层次结构知之甚少,我不知道如何做到这一点,但我觉得这可能是可能的。任何帮助将不胜感激!
答案 0 :(得分:1)
使用不同的数据收集站
立即指出应使用单独的电台表,并且读数应与电台表相关/相关/参考电台表。
对于电台表,您可以使用以下内容: -
CREATE TABLE IF NOT EXISTS stations (id INTEGER PRIMARY KEY, station_name TEXT, station_latitude REAL, station_longitude REAL);
这将创建一个包含4列的表(如果它尚不存在): -
您可以使用以下方式添加几个电台: -
INSERT INTO stations (station_name, station_latitude,station_longitude) VALUES("Zebra", 100.7892, 60.789);
INSERT INTO stations (station_name, station_latitude,station_longitude) VALUES("Yankee", 200.2967, 95.234);
您可以使用以下方式显示/返回这些: -
SELECT * FROM stations
接下来,您可以创建读数表,例如: -
CREATE TABLE IF NOT EXISTS readings(recorded_datetime INTEGER DEFAULT (datetime('now')), data_recorded REAL, station_reference INTEGER);
这将创建一个名为readings的表(如果它还不存在),它将有3列: -
然后您可以使用以下方法为Zebra工作站插入读数: -
INSERT INTO readings (data_recorded,station_reference) VALUES(11.6985,1);
由于尚未提供record_datetime列,因此将使用当前日期时间。
如果: -
INSERT INTO readings VALUES(datetime('1980-01-01 10:40'),11.6985,1);
然后这个读数将是1980年1月1日10:40在第1站。
使用: -
INSERT INTO readings VALUES(datetime('1980-01-01 10:40'),13.6985,2);
INSERT INTO readings VALUES(datetime('1966-03-01 10:40'),15.6985,2);
INSERT INTO readings VALUES(datetime('2000-01-01 10:40'),11.6985,2);
将为Yankee电台添加一些读数(id 2)。
使用SELECT station_reference, recorded_datetime, data_recorded FROM READINGS;
将选择所有列,但station_reference将是结果等中的第一列,例如: -
显而易见的进展是显示包括相应电台的数据。为此,将使用JOIN。也就是说,读数表将与站表连接,其中各个站的详细信息是根据与站的id匹配的station_refrence值。
但是,让我们说我们希望Station信息类似于 stationname(Long = ???? - Lat = ????)日期/时间数据 并根据电台名称进行排序,然后根据日期/时间进行排序。然后可以使用以下内容: -
SELECT
stations.station_name ||
'(Long='||station_longitude||' - Lat='||station_latitude||')'
AS stationinfo,
readings.recorded_datetime,
readings.data_recorded
FROM readings
JOIN stations ON readings.station_reference = stations.id
ORDER BY stations.station_name ASC, readings.recorded_datetime
这将导致: -
你可能(或者有些人会)争论 ,但为什么我不能只有一个包含阅读,日期时间,电台名称,电台纬度,电台经度 的表格。
嗯,你可以。但是: -