2

私はプロジェクトを行っている学生で、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」でない場合は前のデータをロードする必要があります。

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

作成方法を教えてください。並べ替えはできますが、SQLite でこのように作成する方法がわかりません。何か提案があればよろしくお願いします。

4

2 に答える 2

1

特定のタイムスタンプと都市について、次のクエリはその時刻またはそれ以前の最新の気温を取得します。

SELECT Temperature AS USA_NYC
FROM mytable
WHERE Country_City = 'USA_NYC'
  AND Date_Time LIKE '4-10-2012 %'
  AND Date_Time <= '4-10-2012 12:40:10'
  AND Temperature IS NOT NULL
ORDER BY Date_Time DESC
LIMIT 1

(SQLite でサポートされている日付/時刻形式Date_Timeのいずれかを使用すると、比較が簡略化される可能性があることに注意してください。)

また、温度が必要なすべてのタイムスタンプも取得します。

SELECT DISTINCT Date_Time FROM mytable

次に、これら 2 つのクエリを組み合わせて、各タイムスタンプの NYC 値を取得します。

SELECT timestamps.Date_Time,
       (SELECT Temperature
        FROM mytable tvalues
        WHERE tvalues.Country_City = 'USA_NYC'
          AND tvalues.Date_Time LIKE substr(timestamps.Date_Time, 1, 10) || '%'
          AND tvalues.Date_Time <= timestamps.Date_Time
          AND tvalues.Temperature IS NOT NULL
        ORDER BY tvalues.Date_Time DESC
        LIMIT 1) AS USA_NYC
FROM (SELECT DISTINCT Date_Time
      FROM mytable) timestamps

LAおよびの列の追加はDC演習として残します。(値からこれらの列をCountry_City自動的に生成することはできません。SQLite にはピボット テーブル機能がありません。)

于 2012-10-06T12:47:53.897 に答える
0

@Cl: ご説明ありがとうございます。練習問題の答えは

SELECT タイムスタンプ.Date_Time,

   (SELECT Temperature
    FROM mytable tvalues
    WHERE tvalues.Country_City = 'USA_NYC'
      AND tvalues.Date_Time LIKE substr(timestamps.Date_Time, 1, 10) || '%'
      AND tvalues.Date_Time <= timestamps.Date_Time
      AND tvalues.Temperature IS NOT NULL
    ORDER BY tvalues.Date_Time DESC
    LIMIT 1) AS USA_NYC, 
   (SELECT Temperature FROM mytable tvalues WHERE tvalues.Country_City = 'USA_LA'
      AND tvalues.Date_Time LIKE substr(timestamps.Date_Time, 1, 10) || '%'
      AND tvalues.Date_Time <= timestamps.Date_Time
      AND tvalues.Temperature IS NOT NULL
    ORDER BY tvalues.Date_Time DESC
    LIMIT 1) AS USA_LA,     SELECT Temperature
    FROM mytable tvalues
    WHERE tvalues.Country_City = 'USA_DC'
      AND tvalues.Date_Time LIKE substr(timestamps.Date_Time, 1, 10) || '%'
      AND tvalues.Date_Time <= timestamps.Date_Time
      AND tvalues.Temperature IS NOT NULL
    ORDER BY tvalues.Date_Time DESC
    LIMIT 1) AS USA_DC,

FROM (SELECT DISTINCT Date_Time FROM mytable) タイムスタンプ

これは必要な解決策ですか、それとももっと速くなる別の何かを期待していますか?

于 2012-10-08T15:21:09.690 に答える