2009-04-14 3 views
0

誰かがこれで私を助けてくれることを願っています。SQL - GROUP BYでさらにデータを取得する

primary_key_id 
serial_number 
counter 
selected_color 

私はこのテーブルを埋めソースからデータを取得:

は、私は4列でincoming_dataと呼ばれるテーブルを持っているとしましょう。主キーのIDは であり、それは繰り返されません。私は選択された色の異なる複数のシリアル番号を取得します。

このデバイスからのカウンタはますます増加しています。

私がやりたいことは、今日受け取ったすべてのデータを選択し、シリアル番号でデータをグループ化し、最高のカウンタ値を持つレコード のみを取得することです。

シンプル:

SELECT  serial_number, MAX(counter) 
FROM  incoming_data 
GROUP BY serial number 

これは私が受け取った色情報 で何かをしたいということを除いて、完璧に動作します。

選択に色を追加すると、すべてのレコードが取得されます。 その日に受け取った色は異なるためです。それは動作しません。私は、レコードのprimary_key_idを得ることができれば

その後、私はちょうど 色のクエリが、これは各primary_key_id 値が異なるのでどちらか、私はそれらすべてを取得動作しませんでした。

これを行うためのより良いテクニックに関する提案はありますか?

ありがとうございます!

+0

あなたのRDBMSは何ですか? – Sung

答えて

2

でそれらの倍数のいずれかを抽出します"非キー"を得る。 これは、MS SQL Server以降のSybaseで機能します。

SELECT 
    i.serial_number, i.counter, i.selected_color 
FROM 
    (
    SELECT  serial_number, MAX(counter) AS maxc 
    FROM   incoming_data 
    GROUP BY serial number 
    ) max 
    JOIN 
    incoming_data i ON max.serial_number = i.serial_number AND max.maxc = i.counter 
1

EDIT:複数のレコードが同じシリアル番号と最大カウンタ値を持っている場合とトンのodeal。これは、背中に参加、その後、関連するキーを抽出し、最大primary_key_id

Select * From incoming_data 
    Where primary_key_id In 
     (Select Max(primary_key_id) From incoming_data I 
     Where Counter = 
       (Select Max(counter) From incoming_data 
       Where SerialNumber = I.SerialNumber) 
     Group By SerialNumber) 
+0

重複カウンタがある場合、同じ日に2つのデバイスカウンタが500であったとすると、カウンタが一致しているため問題が発生しますか?複数の異なるデバイスからのカウンタが同じになる可能性は非常に高いです。 –

+0

二重引用符を扱うように編集 –

0

こんにちは、これはあなたがしたいことをするかもしれないと思いますか?

SELECT selected_color, serial_number, counter FROM incoming_data GROUP BY serial_number ORDER BY counter DESC LIMIT 1;

+0

1つのserial_numberに対してのみ動作します – gbn

0

クエリから正確な色を必要としませんが、後でそれを解析でき、これをしようとした場合:

SELECT  serial_number, MAX(counter), MAX(CONCAT(counter, ':', selected_color)) 
FROM   incoming_data 
GROUP BY serial number 
0

私は2つの結合テーブルからの最大数を取得しようとしています。繰り返し番号を避けるためにDISTINCTを使用しようとしましたが、失敗しました。私は次のクエリを見つけ、単一のテーブルで完璧に動作しますが、2つのテーブルを結合しても機能しませんでした。私のクエリで次の問合せを実装する方法

: ConsumptionKWH オーダー分まで(ConsumptionKWH)ASCに必要な

によってPeriodicConsumptions グループから上位10 ConsumptionKWH を選択:

"SELECT * FROM" & _ "(SELECT別名上位10" & _ "PeriodicConsumptions.ConsumptionKWH" & _ "MeterReadings.MeterNo、" & _ "MeterReadings.LastKWH、" & _ "MeterReadings.AccountNo、" & _ "MeterReadings.MultiplyFactor、" & _ "MeterReadings.LastReading、" & _ "MeterReadings.ThisMonthReading、" & _ 」MeterReadings .NumberofDays、 "& _ "MeterReadings.ReadingGYear、" & _ "MeterReadings.ReadingGMonth、" & _ "MeterReadings.ReadingDate" & _ " F ROMのMeterReadings、PeriodicConsumptions "& _ "MeterReadings.AccountNo = PeriodicConsumptions.AccountNo" & _ "とMeterReadings.ReadingGYear = PeriodicConsumptions.ConsumptionYear" & _ "とMeterReadings.ReadingGMonth = PeriodicConsumptions.ConsumptionMonth" & _ " とMeterReadings .ReadingDate = PeriodicConsumptions.FromDate "& _ " PeriodicConsumptions.ConsumptionKWHのDESC BY ORDER)としてt- ConsumptionKWHのASC BY "& _ " ORDER」

おかげ