2011-11-30 14 views
1

まず、MySQL 4.0.27を使用しており、この バージョンのソリューションが必要です。MySQL 4.0.xの他のフィールドにMAXを持つフィールドの対応する値を取得する方法

他のフィールドのSELECT文でMAX()を使用しており、MAXフィールドの値に対応する他のフィールドの値を取得する必要があります。

は、テーブルからデータを下回る受注を想定します。

 
-------------------------------------------------------------- 
Product |  CategoryID  | Date  | OrderBy 
-------------------------------------------------------------- 
TV   |  1    | 2011-11-27 | John 
Pen  |  1    | 2011-11-29 | David 
Mouse  |  2    | 2011-11-30 | Mike 
Printer |  1    | 2011-10-19 | Rozi 
HDD  |  2    | 2011-11-02 | Peter 
---------------------------------------------------------------- 

私の要件は、私は次の結果必要があることを意味しており、最近の注文で個人の名前で各カテゴリに注文の数を取得することです:

 
-------------------------------------------------------------------------- 
CategoryID  | OrderBy  |  Order_Count  | Date 
------------------------------------------------------------------------- 
1    | John   |  3    | 2011-11-29 
2    | Peter   |  2    | 2011-11-30 

私はSQLの下に使用している場合:

SELECT CategoryID, OrderBy, COUNT(OrderID) AS Order_count, MAX(Date) 
FROM Orders 
GROUP BY CategoryID 

希望の結果が得られません。私は、抽出された日付に反している同じ名前の代わりに、OrderByに他の名前をつけています。

誰かが、内部クエリやGROUP_CONCATなどの関数を使用しないという制限があるMySQL 4.0.xでこれを実現する方法を提案できますか?

ありがとうございます。

+1

念のため、カテゴリー1のために、名前はデビッドではないでしょう?カテゴリ2の場合は、マイクではないでしょうか?彼らは最新の日付のものです! –

+0

ところで、ジョンは最近でも最古でもありません...とにかくジョンはどうしてそんなに期待していますか? –

+0

私の謝罪;あなたは正しいです、結果はCat 1のためのDavidとCat 2のMileを持っているはずです。しかし、私はこれを取得していません。 –

答えて

0

試してみてください。

SELECT CategoryID, OrderBy, COUNT(OrderID) AS Order_count, Date 
FROM Orders 
GROUP BY CategoryID 
ORDER BY Date Desc 

- あなたは最大の日付に対応する[並べ替え基準値をしたいと仮定。

0

私はいつもそれをmanualにチェックするための大きな助けを見つける(のためのMAXを見つけるための値がインデックス化されていない場合、それはそこに言っているにもかかわらず、これは、サブ選択よりも効率的である、が)

0

試してみてください。

SELECT a.CategoryID, b.OrderBy, COUNT(DISTINCT a.id), MAX(a.Date) 
FROM Orders a 
INNER JOIN Orders b ON a.CategoryID = b.CategoryID 
GROUP BY a.CategoryID 
ORDER BY a.Date DESC,b.Date ASC 
関連する問題