、2つのテーブル、customerid
、lastchange
、internallink
SQLクエリーのグループ化のヘルプおよびネストされたクエリ
internallink
を含む表B
、turnover
を含む
表
A
です(私は彼女を単純にしている一般的な例に変更すると、実際の構造はより複雑になります。今のところSQLの方言はmySQLです。)唯一のユニークなものは、internallinkです。 Aには、同じcustomerID、lastchangeの異なる日付、およびinternallinkの値が異なるレコードがいくつかあります。 これに関連する他の項目があります。私はテーブルを変更することはできません。
は私が特定の値条件に一致するBのエントリがリンクされているためにと顧客(同じ得意先とのすべての最高lastchange値)の最新のであるからrecordIDsを必要としています。
私は
SELECT `internallink` FROM `B` WHERE (`turnover` > 10000)
部分が問題ではないと思います。
私はこれまでのところ得た:SELECT `customerID`, MAX(`lastchange`) FROM `A` WHERE `lastchange` IN (SELECT `internallink` FROM `B` WHERE `turnover` > 10000) GROUP BY `customerID`;
ああを、上記の私の最新の値が基準を満たさないためのCustomerIDsを返しますので、その文は、間違った結果が得られますが、一部の古いはなかった - それは選択します最も古いもので、これを返す。しかし、最新のエントリがしきい値を下回っている場合、customerIDはまったく上がってはなりません。
どこが間違っていましたか、これには正しいアプローチは何ですか?
サンプルデータ 表A
customerid lastchange internallink 3 2010-02-11 11 3 2010-09-04 12 3 2010-10-22 13 3 2010-11-23 14 4 2010-05-05 15 4 2010-12-01 16 5 2010-11-28 17 5 2010-11-29 18
表B
internallink turnover 11 47000 12 11000 13 8000 14 15000 15 17000 16 23000 17 50000 18 10000
私のテストでは、実際のしきい値が12000 であるあなたは、得意先のほとんどは、結果セットにすべきではない見ることができます最近のエントリがしきい値を下回っています。
結果セットは(3,2010-11-23)(4,2010-12-01)である必要がありますが、現在は(5,2010-11-28)も含まれていますが間違っています。
少し近づいてください(お手数です、ありがとうございます!)、これら2つのステートメントはどちらも動作します。
SELECT customerID、MAX(lastchange)、internallink FROM A GROUP BY customerID; SELECT internallink FROM B WHERE(売上高> 12000);
私が必要としているのは、両方の交差点です...正しいロジックです!
サンプルデータを投稿する方法はありますか? 1テーブルあたりのレコード数はわずかですか?あなたが書いたもので問題を視覚化するのは難しいです。 – Andrew
この[スタック交換提案](http://area51.stackexchange.com/proposals/11464/code-review?referrer=aWNm_PdciyFqjFW8CUacGw2 "コードレビュー")に興味があるかもしれません。ベータ版を開始する準備はほぼ完了ですが、もう少し必要です。 – greatwolf