none
不用視窗行函數,如何做到找訂單的最大值 RRS feed

  • 問題

  • 您好:

    我有資料類似如下:

    訂單號碼  ,訂單項  ,AMT

    0001   ,01   ,100 

    0001  ,02  ,  200 <===

    0002,  01,  55  <===

    0002,  02 ,55

    0002,  03,50

    以上,

    最每筆訂單 對大值,如箭頭所示

    1.我可以先用視窗行函數 排序找出資料 

    2.若我不用視窗行函數 做,GROUP BY  mAX的方式 要如何直接 抓出0002,是要抓01項 呢?

    謝謝

    2020年5月31日 上午 01:21

解答

  • 以下方式提供參考

    SELECT O.OrderNo, O.AMT, MIN(O.OrderItem) MinItm
    FROM [dbo].[Order] O (NOLOCK)
    INNER JOIN 
    (
    	SELECT OrderNo, MAX(AMT) MAMT
    	FROM [dbo].[Order] (NOLOCK)
    	GROUP BY OrderNo
    ) MA
    	ON O.OrderNo = MA.OrderNo
    		AND O.AMT = MA.MAMT
    GROUP BY O.OrderNo, O.AMT

    說明一下~

    1.先用 訂單編號 Group

    取得訂單編號的最大金額

    ---

    2.用1.的結果,再跟自己JOIN一次
    依據【訂單編號、最大金額】這兩個欄位JOIN
    然後Group By 訂單編號、最大金額 ,取最小Item

    就醬子,得到最後的結果


    topcat(姍舞之間的極度凝聚)
    http://www.dotblogs.com.tw/topcat
    世界上有兩樣東西分享給別人後,不但不會變少,還會變更多:
    一個是快樂,另一個是知識~ 分享...是知識累積的開始...


    2020年6月4日 上午 06:09

所有回覆

  • 不知道你訂單項要幹嘛

    SELECT 訂單號碼, MAX(AMT) AS maxAMT

    FROM 表格名

    GROUP BY 訂單號碼

    會得到

    0001, 200

    0002, 55


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2020年5月31日 下午 03:44
  • 您好:

    0002,  01,  55  <===

    0002,  02 ,55

    這一筆,會有兩筆相同的55

    所以想說,取其中一筆時,做記號

    謝謝!

    2020年6月2日 上午 11:45
  • 您好:

    想了一下


    ;with X as(
       select ord,item,AMt 
       from tb
       
    ),g as (
       select  ord,MAX(AMT)  AS MAXAMt
       from X
       GROUP BY ord`
    )select X.ord,x.amt,max(item) 
    from X inner join g
    on  x.ord=g.ord
    and x.amt=g.maxamt
    group by  x.ord,x.amt

    不知是還有較好的方式!

    謝謝

    2020年6月2日 下午 12:24
  • 以下方式提供參考

    SELECT O.OrderNo, O.AMT, MIN(O.OrderItem) MinItm
    FROM [dbo].[Order] O (NOLOCK)
    INNER JOIN 
    (
    	SELECT OrderNo, MAX(AMT) MAMT
    	FROM [dbo].[Order] (NOLOCK)
    	GROUP BY OrderNo
    ) MA
    	ON O.OrderNo = MA.OrderNo
    		AND O.AMT = MA.MAMT
    GROUP BY O.OrderNo, O.AMT

    說明一下~

    1.先用 訂單編號 Group

    取得訂單編號的最大金額

    ---

    2.用1.的結果,再跟自己JOIN一次
    依據【訂單編號、最大金額】這兩個欄位JOIN
    然後Group By 訂單編號、最大金額 ,取最小Item

    就醬子,得到最後的結果


    topcat(姍舞之間的極度凝聚)
    http://www.dotblogs.com.tw/topcat
    世界上有兩樣東西分享給別人後,不但不會變少,還會變更多:
    一個是快樂,另一個是知識~ 分享...是知識累積的開始...


    2020年6月4日 上午 06:09