Python 返回基于以前数据的列计数
如何按类型、国家代码和日期获取计数用户id组,其中当前类型为D或A,而以前的类型也是D或A e、 g查询应返回国家/地区代码1,并键入D=>countuser\u id=1 国家/地区代码2,类型A=>countuser\u id=1Python 返回基于以前数据的列计数,python,mysql,sql,count,Python,Mysql,Sql,Count,如何按类型、国家代码和日期获取计数用户id组,其中当前类型为D或A,而以前的类型也是D或A e、 g查询应返回国家/地区代码1,并键入D=>countuser\u id=1 国家/地区代码2,类型A=>countuser\u id=1 id country_code Type user_id Date 1 1 D 1 01-01-14 2 1 ND 1 02-01-14 3 1 D 1
id country_code Type user_id Date
1 1 D 1 01-01-14
2 1 ND 1 02-01-14
3 1 D 1 03-01-14
4 1 D 1 04-01-14
5 2 D 1 05-01-14
6 2 ND 2 06-01-14
7 2 A 1 07-01-14
8 2 A 1 08-01-14
我想你想要的是:
select type, country_code, date, count(distinct user_id)
from tbl x
where type in ('D', 'A')
and exists
(select 1
from tbl y
where y.type in ('D', 'A')
and y.country_code = x.country_code
and y.date <= (select max(z.date)
from tbl z
where z.date < x.date
and z.type = y.type
and z.country_code = y.country_code))
group by type, country_code, date
我假设您需要一个不同的用户ID计数,如果不是这样,请删除distinct关键字
这里有一个sql fiddle测试,用于测试您的数据:因为您的计数取决于“之前”的数据,这难道不意味着您还必须按日期分组吗?因为前面的日期取决于当前日期。我不确定你所说的话是否有意义。谢谢你的回复,但结果不应该是两行,因为同一个国家出现了一次A和D。但如前所述,在不止一个日期。你必须按日期分组,如果你要计算每个日期之前的行。应该是我认为我不能很好地解释我的问题,所以我真正想要的是在当前类型和以前的类型是A或D时对用户ID进行计数。我不知道是否应该考虑日期。例如,如果今天的类型是A,用户id是1,而昨天的类型也是相同的,或者类型是D,那么我想在这些匹配中计算为1,而不是A或DI的两个实例,如果是这样的话,那么计数将与1有什么不同。您是否只需要每个国家/地区的用户列表,这些国家/地区的当前最高日期类型是国家/地区X的a或D,而其上一个最高日期类型是国家/地区X的a或D?