0

言葉足らずな質問で申し訳ありません。例と私がこれまでに思いついたものを通して最もよく説明されています:

テーブル「myInfo」には次の列があります。

1. id (PK) 
2. key 
3. value 
4. metaId 

テーブル「メタ」には次の列があります。

1. id (PK) 
2. metaName 
3. metaValue 
4. instanceNum 

「myInfo」テーブルの metaId は、「meta」テーブルの instanceNum に関連付けられます。"value" 列の値は、metaId を持つ別の行で変わることがあります。metaId は、「メタ」テーブルのタイムスタンプ値へのリンクと考えてください (「タイムスタンプ」とその値は、それぞれ metaName 列と metaValue 列に入ります)。

「myInfo」の「値」列の個別の値を選択したい。これまでのところ、私は持っています:

SELECT DISTINCT mi.key, mi.value 
  FROM myInfo as mi JOIN metadata as meta 
 WHERE mi.metaId=meta.instanceNum 
   AND meta.key = 'timestamp' 
   AND mi.key='maxWeight'; 

しかし、これらの値に関連付けられたタイムスタンプも必要です。だから私は出力を次のようにしたい:

キー値のタイムスタンプ
maxWeight 10 トン 15:00:05 2011-01-01
maxWeight 5 トン 08:00:07 2011-10-12
maxWeight 25 トン 13:05:09 2013-08-01

タイムスタンプによってすべての行が一意になるため、タイムスタンプを SELECT の列の 1 つとして配置することはできません。mi.attrValue のみの後ろに DISTINCT キーワードを配置しようとしましたが、MySQL エラーが発生しました。

4

2 に答える 2

0
SELECT mi.key, mi.value, min(meta.value) 
  FROM myInfo as mi JOIN metadata as meta 
 WHERE mi.metaId=meta.instanceNum 
   AND meta.key = 'timestamp' 
   AND mi.key='maxWeight' 
 group by mi.key,mi.value 

最も早いタイムスタンプ値で必要なものを取得します。

于 2013-08-29T21:16:38.477 に答える
0

これは完全にテストされていませんが、連結によるグループ化は機能する可能性があります。

SELECT mi.key, mi.value, meta.value
  FROM myInfo as mi JOIN metadata as meta ON mi.metaId = meta.id
 WHERE mi.key = 'maxWeight'
   AND meta.key = 'timestamp' 
 GROUP BY CONCAT(mi.key, mi.value)

ただし、どのタイムスタンプが表示されるかという問題はまだあります。たとえば、特定のキーと値のペアに対して 3 つのレコードがある場合、どのレコードが結果セットに表示されるでしょうか?

key       value   timestamp 
maxWeight 10 tons 15:00:05 2011-01-01 
maxWeight 10 tons 08:00:07 2011-10-12 
maxWeight 10 tons 13:05:09 2013-08-01 

group by クエリでは、これらの結果の 1 つだけが表示されますが、どれでしょうか? グループの注文について考える必要があります (これはまったく新しい球技です)。

于 2013-08-29T12:41:56.613 に答える