2014-08-29 306 views
0

我試圖通過site.Site_Name,爲每個hive.hiveno和它的最大值(hiverdg.invdate)。運行下面的代碼不起作用,因爲site.Site_Name沒有被聚集。如果我添加site.Site_Name對GROUP BY,代碼運行,但輸出中顯示結果重複,每進行一次site.Site_Name按SQL中的多列分組

select site.Site_Name ,hive.hiveno, max(hiverdg.invdate) 
from hiverdg 
     inner join hive 
     on  hiveRdg.hive_Link = hive.hive_Link 
     inner join Customer 
     on  customer.Customer_Link = hive.Customer_Link 
     inner join site 
     on  site.Customer_Link = customer.Customer_Link   
where 
(hiverdg.xtype = 'N' 
and customer.CustomerName = 'Cust1') 
or 
(hiverdg.xtype = 'A' 
and customer.CustomerName = 'Cust1') 
group by hive.hiveno 
+0

您希望看到哪個網​​站?與'max(invdate)'關聯的那個? – Vland 2014-08-29 10:14:38

+0

Vland - 是的,這是正確的 – user1936588 2014-08-29 10:17:11

+0

hiveno組,通過選擇hiveno和max(invdate)。然後使用子查詢/連接來獲取site_name,其中日期等於max(invdate) – Vland 2014-08-29 10:21:08

回答

0

要做到這一點,最簡單的方式,與您的查詢,是substring_index()/group_concat()招:

select substring_index(group_concat(s.Site_Name order by rdg.invdate desc separator '|' 
            ), '|', 1 
        ) as SiteName, 
     h.hiveno, max(rdg.invdate) 
from hiverdg rdg inner join 
    hive h 
    on rdg.hive_Link = h.hive_Link inner join 
    Customer c 
    on c.Customer_Link = h.Customer_Link inner join 
    site s 
    on s.Customer_Link = c.Customer_Link   
where rdg.xtype in ('N', 'A') and c.CustomerName = 'Cust1') 
group by h.hiveno; 

我也做了以下修改您的查詢:

  • 介紹表的別名,使查詢更容易編寫和閱讀。
  • 更改了where使用in,簡化了邏輯。