2012-09-19 10 views
5

Mam kwerendę, która wygląda jak thos:Jak zrobić grupę o klauzuli o max

SELECT max(insert_date), 
     creative_id, 
     creative_object 
FROM rtb_creatives 
WHERE adgroup_id = 'agid1608844879' 
     AND is_delete IN (0) 
GROUP BY insert_date, 
      creative_id, 
      creative_object 

np Mam 4 rzędy: insert_date CREATIVE_ID, creative_object

june 12 a b 
june13 a b 
june 12 c d 
june13 c d 

Kwerenda zwraca wszystkie wiersze.

muszę wrócić

june13 a b 
june13 c d 

jaki sposób zmodyfikować kwerendę?

+0

będzie to "grupa przez MAX (data_włączenia)"? –

+2

usuń parametr data_wyjści z grupy i spróbuj ponownie i powiedz nam, co się dzieje. – CRDave

Odpowiedz

5

Wystarczy wyjąć insert_date z klauzuli GROUP BY:

SELECT max(insert_date) AS insert_date, creative_id, creative_object 
from rtb_creatives 
where adgroup_id='agid1608844879' and is_delete in (0) 
group by creative_id, creative_object 
0
create table rtb_creatives (insert_date varchar(20), creative_id char(1), creative_object char(1)); 
insert into rtb_creatives (insert_date, creative_id, creative_object) values 
('june 12', 'a', 'b'), 
('june 13', 'a', 'b'), 
('june 12', 'c', 'd'), 
('june 13', 'c', 'd') 
; 

SELECT insert_date, creative_id, creative_object 
from rtb_creatives 
where 
    adgroup_id='agid1608844879' 
    and is_delete in (0) 
    and insert_date = (select max(insert_date) from rtb_creatives) 
group by insert_date, creative_id, creative_object 
; 
+-------------+-------------+-----------------+ 
| insert_date | creative_id | creative_object | 
+-------------+-------------+-----------------+ 
| june 13  | a   | b    | 
| june 13  | c   | d    | 
+-------------+-------------+-----------------+ 
+0

Czy na pewno ten będzie działać? – WojtusJ

0

Jeśli wystarczy wiedzieć, co maksymalny termin szczególności creative_id i creative_object jest, wystarczy usunąć insert_date od GROUP BY klauzuli , Czarownica spowoduje wybór maksymalnej daty dla każdej grupy, również zmienię warunek IN, aby był bardziej przejrzysty (chociaż w tym konkretnym przypadku nie robi dużej różnicy), tak:

SELECT max(insert_date) as insert_date, 
     creative_id, 
     creative_object 
FROM rtb_creatives 
WHERE adgroup_id = 'agid1608844879' 
     AND is_delete = 0 
GROUP BY creative_id, 
      creative_object 
0

Problem polega na tym, że data wstawienia jest zdefiniowana jako ciąg. Należy go zdefiniować jako typ daty, aby Max() mógł obliczyć prawidłową kolejność. Załóżmy, że jest inna data taka jak 05 sierpnia jako data wstawienia, a następnie Max wróci 13 czerwca. Należy pamiętać, że w kolejce łańcuchowej występuje różnica w czerwcu13 i czerwcu 13.

Kiedy max (wyrażenie) wyrażenie nie powinno być w klauzuli group by.

GROUP BY insert_date, creative_id, creative_object

Nadzieja to pomaga.

Powiązane problemy