如何在SQL中按特定列和每个日期选择唯一的行?
我有一个如下所示的数据库表:如何在SQL中按特定列和每个日期选择唯一的行?,sql,mariadb,Sql,Mariadb,我有一个如下所示的数据库表: id | project_id | stat_date | source | medium | campaign | impressions ---------------------------------------------------------------------- 5 | 2312 | 2019-08-30| google | cpc | camp_a | 20 4 | 2312 | 2019-08-
id | project_id | stat_date | source | medium | campaign | impressions
----------------------------------------------------------------------
5 | 2312 | 2019-08-30| google | cpc | camp_a | 20
4 | 2312 | 2019-08-30| google | cpc | camp_a | 20
3 | 2312 | 2019-08-30| google | organic| camp_b | 12
2 | 2312 | 2019-08-29| google | cpc | camp_a | 35
1 | 2312 | 2019-08-29| google | cpc | camp_c | 44
...| ... | ...| ... | ... | ... | ...
我需要得到的是(没有id,stat_date列)在29和30之间(日期间隔可能不同):
正如您所看到的,我希望消除印象为20的重复行,并在末尾获得“印象”列的总和
那么,我可以使用什么查询来获得这种结果呢?您似乎在寻找一个简单的聚合查询,其中包含
WHERE
子句中的过滤器:
SELECT
project_id,
source,
medium,
campaign,
SUM(DISTINCT impressions) impressions
FROM mytable
WHERE stat_date >= '2019-08-29' AND stat_date <= '2019-08-30'
GROUP BY
project_id,
source,
medium,
campaign
在此中,两个查询都返回:
| project_id | source | medium | campaign | impressions |
| ---------- | ------ | ------- | -------- | ----------- |
| 2312 | google | cpc | camp_a | 55 |
| 2312 | google | cpc | camp_c | 44 |
| 2312 | google | organic | camp_b | 12 |
非常感谢你!这正是我需要的:)
SELECT
project_id,
source,
medium,
campaign,
SUM(impressions) impressions
FROM (
SELECT DISTINCT
stat_date,
project_id,
source,
medium,
campaign,
impressions
FROM mytable
) x
WHERE stat_date >= '2019-08-29' AND stat_date <= '2019-08-30'
GROUP BY
project_id,
source,
medium,
campaign
| project_id | source | medium | campaign | impressions |
| ---------- | ------ | ------- | -------- | ----------- |
| 2312 | google | cpc | camp_a | 55 |
| 2312 | google | cpc | camp_c | 44 |
| 2312 | google | organic | camp_b | 12 |