2014-08-29 10 views
0

Я пытаюсь привести через site.Site_Name, для каждого hive.hiveno и его max (hiverdg.invdate). Выполнение кода ниже не работает, потому что site.Site_Name не обрабатывается. Если добавить site.Site_Name в Group By, код работает, но Ouput отображает повторены результаты, один раз для каждого 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

+0

Vland - Да, это правильно – user1936588

+0

группа от hiveno, выберите hiveno и max (invdate), как и вы. затем используйте подзапрос/join, чтобы получить имя_сайта, где дата равна max (invdate) – Vland

ответ

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; 

Я также сделал следующие изменения в запрос:

  • Появилось таблицы псевдонимов, чтобы облегчить запрос писать и читать.
  • Изменен wherein, что упрощает логику.
Смежные вопросы