0

我是一名学生,正在做一个项目,我必须使用 SQLite,但是我是 SQLite 的新手。我在下面描述了我的问题。

我有一个表格(包含 60000 行),其格式如下所示。

Date_Time           Country_City Temperature
4-10-2012 12:10:10  USA_NYC        20
4-10-2012 12:10:10  USA_LA         17
4-10-2012 12:10:10  USA_DC         19
4-10-2012 12:40:10  USA_LA         18
4-10-2012 12:40:10  USA_DC         18

我必须按如下所示对表格进行排序和创建,如果数据在 NYC 中丢失,则数据必须为“NaN”。如果所有行都包含单个时间戳的“NaN”,则必须将其删除。

Date_Time         USA_NYC USA_LA USA_DC
4-10-2012 12:10:10 20      17     19
4-10-2012 12:40:10 NaN     18     18

你能告诉我如何创建它,我可以排序和排序,但我不知道如何在 SQLite 中创建这样的。我将不胜感激任何建议。

4

2 回答 2

0

您的问题当然不是特定于 SQLite 的,而是解决了正确 SQL 查询的公式。快速浏览一下您想要实现的目标后,我确信在普通 SQL-92 中是可能的。

目前,如果我发布解决方案,我不确定是否会回答家庭作业。因此,我将给出提示:结合连接/外部连接查看子查询(从...中选择 Date_Time、USA_NYC)。

关于 NaN 值,我不确定您是否想要它或者是否有 NULL 值。如果您确实需要字符串值“NaN”,则可以使用 case 构造将 NULL 值转换为“NaN”字符串。

我看到困难的地方:如果您不知道提前期待哪些列(例如,USA_NYC),它可能会变得更加棘手(告诉我们是否是这种情况)。

于 2012-10-09T12:46:57.227 回答
0

首先,这些查询获取所有可能的时间戳和城市值:

SELECT DISTINCT Date_Time FROM mytable
SELECT DISTINCT Country_City FROM mytable

通过交叉连接结果,我们得到所有可能的组合(即使是表中不存在的组合)。然后,我们可以查找存在外连接的那些温度值:

SELECT t1.Date_Time,
       t1.Country_City,
       Temperature
FROM ((SELECT DISTINCT Date_Time    FROM mytable)
      JOIN
      (SELECT DISTINCT Country_City FROM mytable)) t1
     LEFT JOIN mytable t2
     ON t1.Date_Time = t2.Date_Time AND t1.Country_City = t2.Country_City

结果如下所示:

t1.Date_Time        t1.Country_City  Temperature
------------------  ---------------  -----------
4-10-2012 12:10:10  USA_NYC          20
4-10-2012 12:10:10  USA_LA           17
4-10-2012 12:10:10  USA_DC           19
4-10-2012 12:40:10  USA_NYC                   <-- NULL
4-10-2012 12:40:10  USA_LA           18
4-10-2012 12:40:10  USA_DC           18

如果没有 SQLite 所没有的枢轴函数,就不可能自动将城市作为列。

于 2012-10-09T12:57:16.090 回答