5

私はthosのようなクエリを持っています:

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 

たとえば、4 つの行があります: insert_date、creative_id、creative_object

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

クエリはすべての行を返しています。

私は戻る必要があります

june13 a b
 june13 c d

クエリを変更するにはどうすればよいですか?

4

4 に答える 4

5

insert_dateから を削除するだけです。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
于 2012-09-19T11:51:19.160 に答える
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               |
+-------------+-------------+-----------------+
于 2012-09-19T11:52:24.417 に答える
0

ここでの問題は、挿入日が文字列として定義されていることです。Max() が正しい順序を計算できるように、日付型として定義する必要があります。挿入日として 8 月 5 日などの他の日付があると仮定すると、Max は 6 月 13 日を返します。また、文字列の順序付けでは、June13 と June 13 に違いがあることに注意してください。

max(an expression) の場合、その式は group by 句に含めないでください。

GROUP BY insert_date, creative_id, creative_object

お役に立てれば。

于 2012-09-19T13:09:09.877 に答える
0

creative_id特定の andの最大日付を知る必要がある場合creative_objectは、句から insert_date を削除するだけでよくGROUP BY、魔女はすべてのグループの最大日付を選択します。また、IN 条件を変更してより明確にします (ただし、この特定のケースでは、大きな違いはありません)、そのように:

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
于 2012-09-19T11:57:50.617 に答える