1

最初に: ご覧いただきありがとうございます。お時間をいただきありがとうございます。

ポイントへ:

スキーマ: myTable 用

nonUniqueID    YEAR    MONTH    DAY    HOUR    numericValue
1              2012    01       01     01      99.9
1              2012    01       01     02      65.2
1              2012    01       01     03      -88
7              2012    02       08     21      9.08
1              2012    01       01     09      99.913
1              2013    01       01     01      99.999999

基本的に、これは 2 つの値nonUniqueIDでありnumericValue、詳細な日付があります。

ここで、このデータベース全体で最大の日付を 1 つ取得する必要があります。上記のデータを使用すると、期待される結果は次のようになります。

nonUniqueID    YEAR    MONTH    DAY    HOUR    numericValue
1              2013    01       01     01      99.999999

これは SQLite であるため、MAX() を数回使用する必要があることはわかっています。順序は、MAX(YEAR)、MAX(MONTH)、MAX(DAY)、MAX(HOUR) の順である必要があります。

基本的に、クエリは次のように機能します (クエリを作成するための SQL 構文について十分に知りません)。

  1. YEAR が最も高いすべてのレコードを検索する
  2. このセットから、MONTH が最も高いすべてのレコードを検索します
  3. このセットから、DAY が最も高いすべてのレコードを検索します
  4. このセットから、HOUR が最も高いすべてのレコードを検索します
  5. このレコードを返す

これは、動作しない別の StackExchange の質問から適応した SQL です。

Select * From ( 
    Select max(YEAR) as Y FROM myTable 

    union 

    Select max(MONTH) as M FROM myTable 

    union 

    Select max(DAY) as D FROM myTable 

    union

    Select max(HOUR) as H FROM myTable 
) myTable;

返す

Y
-----
21 
08 
02 
2013

これを予想アウトと比較します。

nonUniqueID    YEAR    MONTH    DAY    HOUR    numericValue
1              2013    01       01     01      99.999999

4 つの値を持つ 1 つのレコードではなく、4 つのレコードが返されました。

誰かが私の質問を手伝ってくれませんか? ありがとう!

4

1 に答える 1

3

これを試して

 SELECT nonUniqueID ,  YEAR ,  MONTH ,  DAY ,  HOUR ,  numericValue FROM myTable as a
 INNER JOIN (Select max(MONTH) FROM  myTable) as b
 ON a.YEAR = B.YEAR
 INNER JOIN (Select max(DAY) FROM myTable) as c
 ON b.YEAR = c.YEAR
 INNER JOIN (Select max(HOUR) FROM myTable) as d
 ON c.YEAR = d.YEAR
 WHERE a.YEAR = (Select max(YEAR) FROM myTable) 

UNION 結果が1つの列に結合されることを意味するため、4つの値を返します

編集

答えを更新したところです。それが機能するかどうかを確認してください。このクエリのパフォーマンスについてはよくわかりません

于 2012-08-11T02:34:44.550 に答える