2016-11-15 12 views
2

同じIDを持つ複数のレコードがある場合は、互いにアクセスするテーブルがあります。SQLクエリIDをグループ化し、他のフィールドに特定の値がある場合

特定の日付の値を持つ特定のレコードを検索したいと思います。しかし、そのIDを持つすべての対応する情報(つまり、同じIDを持つ他のすべてのレコード)が必要です。私はこのようなものを試してみた:

SELECT * 
FROM myTable 
WHERE LEFT(Field1,7) = '2016-11' IN (SELECT ID 
             FROM myTable 
             GROUP BY ID 
             HAVING COUNT(*)>1) 

SELECT * 
FROM myTable 
WHERE ID = (SELECT * FROM myTable WHERE LEFT(Field1,7) = '2016-11' 

は、これらのどちらも私に適切な出力を与えています。私はある種のForループが必要かもしれないと思うが、SQLでこれをやる経験はあまりない。そうすれば、その日付部分で返されるすべてのIDをループすることができます。助言がありますか?私はポストにテーブルフォーマットを入れますが、テーブルフォーマットは何らかの理由で私のために働いていません。欲求不満は本当です!

母は、私の質問を読む時間を取ってくれてありがとうございます。とても有難い。ここでEDIT

は私のテーブルはどのようなものであるかを視覚的にです:

ExampleTable

私は11月中に発生したすべてのレコードを選択するだけでなく、取得したいのですが

対応する情報(すなわち、11月レコードと同じID番号を持つレコード)。

+0

なぜサブクエリ: 'WHERE mytableはSELECT * FROM LEFT(Field1,7)= '2016-11''? – Parfait

+0

私は今月中に行われたすべてのレコードを選択しようとしています。ただし、各値は必ずしも日付ではないため、その列はテキストとして書式設定されます。 最後に、今月の日付のすべてのレコードを除外し、そのIDと同じIDを持つ他のすべてのレコードを取得したいと思います。 –

答えて

1

は、サブクエリでWHERE条件を追加することを検討して:また

SELECT * 
FROM myTable 
WHERE ID IN (SELECT ID FROM myTable 
      WHERE LEFT(Field1, 7) = '2016-11'); 

サブクエリを回避するために、フィルターの自己にINNER JOINを試してみてくださいIDにより参加:

SELECT myTable.* 
FROM myTable 
INNER JOIN 
    (SELECT ID FROM myTable 
    WHERE LEFT(Field1, 7) = '2016-11') sub 
ON sub.ID = myTable.ID 
+0

残念ながら、それでも私には日付が入っているレコードしかありません。/私のテーブルのような形式のスクリーンショットを追加しました。多分それが助けになるでしょう。 –

+0

編集を参照してください。また、[エンティティ/属性値モデル](http://stackoverflow.com/questions/870808/entity-attribute-value-database-vs-strict-relational-model-ecommerce-question)がベストではありませんリレーショナルデータベースの場合 – Parfait

+0

これはxmlファイルから来て、あなたが見たようにインポートされるデータです。私がそれを変更しない理由は、レコードごとのフィールド数が変わるかどうかわからないからです。私の知らないうちに列を追加することができました。テーブルを旋回させてダイナミクスを維持できる方法があれば、私はそれについて学ぶことが大好きです。上記の両方の方法も私のために働いたので、ありがとう! –

関連する問題