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」でなければなりません。すべての行に 1 つのタイム スタンプの「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 に答える