根据以前的数据获取时间段内唯一值的数量

阿图

我有一个country带桌子idcountry_uuidvisitedarrival列。

例如:

CREATE TABLE `country` (
  `id` serial primary key,
  `country_uuid` varchar(191) NOT NULL,
  `visited` varchar(5) DEFAULT NULL,
  `arrival` DATE NOT NULL
);

INSERT INTO country (country_uuid, visited, arrival) VALUES 
('abc', null, "2019.01.01"),
('abc', 'yes',"2019.01.02"),
('cba', 'no', "2019.01.03"),
('def', 'yes',"2019.01.04"),
('def', 'yes',"2019.01.04"),
('cba', 'yes',"2019.01.04"),
('abc', 'yes',"2019.01.05");

我需要一个mySQL查询,例如对于从2019.01.03到2019.01.06的时间段将返回1(基于)visited = yes,但未列出visited = yes2019.01.03之前的时间段。因此,返回1是因为仅一次访问了cba,但是即使也一次访问了该时间段的abc,它还是在2019.01.02的2019.01.03之前被访问了。

def不被计数,因为它在该时间段内被访问过两次。

最后,正如我提到的,我需要看到以下内容:

unique_country_uuid_count
1

我什至不知道该怎么缠头。我在这段时间里使用了distinct,但是我不知道如何根据以前的数据进行排除。

我什至不确定我编写的代码是否正确,但是我尝试了以下操作:

SELECT DISTINCT 
    con.country_uuid, 
    con.visited AS visited, 
    con.arrival AS arrival
FROM country con
WHERE 
    (arrival BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW()) AND 
    visited IS NOT NULL AND
    visited='yes' ;

链接到sqlfiddle

解:

首先,我最终使用了@Alberto Moro解决方案,但随后采用了@Strawberry方式,因为它效率更高:

SELECT COUNT(*) 
FROM country con1
LEFT JOIN country con2 ON con1.country_uuid = con2.country_uuid 
   AND con2.arrival < con1.arrival 
   AND con2.visited IN ('yes', 'no')
WHERE con1.visited = 'yes'
    AND con1.arrival BETWEEN '2019-01-03' AND '2019-01-06'
    AND con2.id IS NULL;

感谢您的帮助或提前提示。

草莓
SELECT x.country_uuid
     , COUNT(*) total
  FROM country x
  LEFT
  JOIN country y
    ON y.country_uuid = x.country_uuid
   AND y.visited = 'yes'
   AND y.arrival < '2019-01-03'
 WHERE x.visited = 'yes'
   AND x.arrival BETWEEN '2019-01-03' AND '2019-01-06'
   AND y.id IS NULL
 GROUP
    BY x.country_uuid;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据特定日期时间段选择数据的一部分?

获取时间段的值

获取在特定时间段内创建的记录

在python中处理时间序列数据:对序列求和并在一个时间段内进行汇总

将数据划分为NA数量最少的时间段

SQLite查询以获取小时时间段的总和值

使用Tableau如何计算用户选择的时间段内的唯一身份访问者?

R:为R中的数据集中的每个唯一个体计算过去特定时间段内的出现次数

获取特定时间段内的库存退货

表的MAX()和MIN()的差返回选定时间段内的聚集差而不是唯一差

如何获取给定时间段内处于活动状态的AKS中的吊舱数量

在面板数据集中,定义虚拟变量,以确定值是否在随后的时间段内出现在同一单位内

如何获取仅在特定时间段内购买商品的用户(MySQL数据库)

从同一张表中获取不同时间段的数据

按一些值和时间段分组

时间段内的时间段(PHP)

创建mysql查询以在3天的时间段内获取数据

每个时间段的唯一值

让 R 中某个时间段内的数据值相同

mongodb获取时间段内的价值总和

Sqlite 选择一个时间段内的数据

根据时间段条件按日期加入数据

获取特定时间段内每个用户的最大值 SQL

通过基于时间段和唯一 ID 号创建子集来合并数据帧

在特定时间段内从 TSI 获取数据帧

以微米为单位在定义的时间段内聚合具有唯一 ID 的指标?

计算前一个时间段内重复值的数量

如何根据某个时间段内的时间戳或以前的记录对数据进行分桶?

获取指定时间段内推特账号的关注者数量