簡體   English   中英

在SQL中按多列分組

[英]Grouping by multiple columns in SQL

我正在嘗試通過site.Site_Name來獲取每個hive.hiveno及其最大值(hiverdg.invdate)。 由於site.Site_Name未凝結,因此無法運行下面的代碼。 如果我將site.Site_Name添加到分組依據,則代碼將運行,但輸出將重復顯示結果,每個站點一次。

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

使用查詢執行此操作的最簡單方法是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 ,簡化了邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM