2017-03-03 5 views
1

このクエリの結果は、3つの最新の行(Table1.Nameでグループ化されています)を私に与えるべきです。 テーブル1には、「名前」、「タイムスタンプ」、「電圧」があります。 テーブル2には、「名前」、「データ」があります。なぜgroup byとsort byは0の応答を返す

"ORDER BY Table1.Timestamp"を削除すると、3行(期待通り)が得られますが、3つの最新のデータベースを必要とする3つの最も古いエントリです。 (私はTable1とTable2に3つのName値があります)。

コード:

SELECT * from Table1 
INNER JOIN Table2 
ON Table1.Name=Table2.Name 
GROUP BY Table1.Name 
ORDER BY Table1.Timestamp; 
+0

* "これは3つの最新のデータベースを必要とするデータベースで最も古い3つのエントリです。" * - ** ** ** GROUP BYの仕事ではありません。 'GROUP BY'はデータベースから行を返しません。データベースからの値を使用して返される値を生成します。 – axiac

+0

[tag:greatest-n-per-group]で同様の質問をしてください。 – axiac

+0

まだ苦労している場合は、http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-aを参照してください。 -very-simple-sql-query – Strawberry

答えて

0

あなたはこのようなクエリを実行しようとすることができます:

SELECT t.*,t2.* from Table1 t 
INNER JOIN Table2 t2 
ON t.Name=t2.Name 
WHERE t.Timestamp = (
    SELECT MAX(t3.Timestamp) FROM Table1 t3 
    WHERE t3.Name = t.Name 
) 
+0

@GuillaumeSTLRあなたのコードが動作します!どうもありがとうございます。処理に約20秒かかるのはなぜですか? – Esp

+0

データベース内の行数によって異なります。 GROUP BY文を削除してみてください! –

+0

私は4000行しか持っていません。 – Esp

0

あなたはソートし、上位3撮ることができます:あなたがある場合

SELECT * from Table1 
INNER JOIN Table2 
ON Table1.Name=Table2.Name 
ORDER BY Table1.Timestamp DESC 
LIMIT 3 
0

を2つ以上のテーブルを結合すると、selectクエリで*を使用しません。特定の列名を使用して選択クエリで列があいまいにならないようにするには、Table1を使用することもできます。 、表2。でも、選択クエリで特定の列を使用するのに適しています。表1 INNERから

SELECT Table1.Name、Table1.Timestamp Table1.Timestamp BY Table1.Name ORDER BY Table1.Name = Table2.Name 基上の表2 をJOIN。