2016-05-31 12 views
0

私はphp/mysql best checkingシステムの前に作業しており、新しいチェックを作成する際には、私は上の画像のテーブル上でこのクエリを実行するとSQL 2番目のIDでグループ化された最大IDを取得

bbcheckProducts  
ID checkID productID checked bestBefore 
1  1   1  1 2015-05-06 
2  2   1  1 2016-07-22 
3  3   1  1 2016-09-16 

bbChecks 
checkID userID closed 
     1  1  1 
     2  2  1 
     3  1  1 

ので:私はこれを成し遂げるためにいくつかのテーブルで働いています最近閉じチェック

SELECT ID, 
     MAX(checkID) AS maxCheck, 
     bestBefore 
FROM bbcheckProducts 
WHERE checkID IN 
(
    SELECT checkID 
    FROM bbChecks 
    WHERE userID = 1 
    AND  closed = 1 
) 
AND  checked = 1 
GROUP BY productID 
ORDER BY bestbefore ASC 

それが何かを返しますl ike this:

ID = 1 
maxCheck = 3 
bestBefore = 2015-05-06 

したがって、最大checkIDを使用しますが、他の値はproductIDの最初の発生と同じです。

ID=3 
maxCheck = 3 
bestBefore = 2016-09-16 

ので、どのように私は私のクエリはそのように動作するように得るか:私は結果は次のようになりますので、それが最大のIDと一緒に行くの値を取るようにしたいですか?

注:製品1はチェック1と3にあり、製品2は1のみであるため、チェック1の製品2のデータとチェック3の製品1のデータを取らなければなりません。

+2

一般的なGROUP BYルールの意味は次のとおりです。 GROUP BY句が指定されている場合、SELECTリストの各列参照は、グループ化列を特定するか、または集合関数の引数でなければなりません。 – jarlh

+1

データセットは、問題を適切に再現できるほど十分に広範ではありません。 – Strawberry

答えて

0

あなたは、あなたのbbChecks -table内の既存のcheck_IDと、すべてのレコードの縮小セットを得るためにあなたのテーブルを結合でき

select * from table_name where some_colomn = 'some_value' and some_colomn in (select max(some_colomn) from table_name2 where some_col = 'some_value' group by some_colomn)

+0

なぜあなたが投票を下したのですか – dev

-1

このクエリのように第二のテーブルの上に最大の機能を使用する必要があります。 次に、縮小セットでmax(CheckID)-selectionを実行できます。あなたのケースでは

これはそのように希望:

SELECT ID, max(checkID), bestBefore 
FROM bbcheckProducts p 
INNER JOIN bbChecks c ON (p.checkID = c.checkID) 
WHERE UserID = 1 
AND closed = 1 
AND checked = 1 

これはに、checkIDs 1と3で最初のalleのレコードが戻ります。そして、あなたは最大(checkID)を選択し、それはあなたを返しますcheckID 3.

+0

これは1つの製品しかない場合にはうまくいくでしょう。すべての製品について最大のcheckIDを取得するためのクエリが必要です – steffansk1997

関連する問題