gpt4 book ai didi

MySQL 查询按 IP 地址、用户 ID 和时间戳分组

转载 作者:行者123 更新时间:2023-11-29 02:39:49 25 4
gpt4 key购买 nike

我正在寻找一种方法来计算某个区域的 2 个日期之间表中的所有记录。

查询必须考虑以下要求:

  • 同一天来自同一ip_from的多行,对于同一org_id只能算1。

我在 mysql 中有一个这样的表:

+--------+----------+--------------+-----------------+-----------------+------------+---------------------+
| org_id | org_name | user_id_from | auth_level_from | ip_from | region_org | timestamp |
+--------+----------+--------------+-----------------+-----------------+------------+---------------------+
| 1 | test1 | NULL | NULL | 123.456.789.012 | Antwerpen | 2019-03-06 00:00:00 |
| 2 | test2 | 3 | 1 | 454.454.454.454 | NULL | 2019-03-06 00:00:00 |
| 1 | test1 | 5 | 2 | 111.111.111.111 | Antwerpen | 2019-03-05 10:00:00 |
| 1 | test1 | 5 | 2 | 111.111.111.111 | Antwerpen | 2019-03-05 11:00:00 |
| 1 | test1 | 5 | 2 | 111.111.111.111 | Antwerpen | 2019-03-05 12:00:00 |
| 1 | test1 | 100 | 1 | 999.999.999.999 | Antwerpen | 2019-03-05 12:00:00 |
+--------+----------+--------------+-----------------+-----------------+------------+---------------------+

org_id 列包含组织的 ID,org_name 包含名称。

User_id_from 列包含登录并查看个人资料页面的用户的 user_id(匿名用户也可以查看,因此可以为 NULL)。如果用户已登录,则填写 Auth_level_from,否则为 NULL。

ip_from 包含通过 $_SERVER['remote_addr'] 登录的用户的 IP 地址(我知道这可以更改,但这对我的用例来说无关紧要)。

Region_org 包含组织所在的区域,请注意,一个组织可以位于多个区域,在这种情况下,我将插入与之前完全相同的第二行,但 region_org 有所不同。但也可以为NULL

最后一个时间戳跟踪事件的插入时间。

这就是我的查询:

SELECT org_id, org_name, count(*) as total, DATE(timestamp) as date
FROM `org_profile_views_events`
WHERE region_org = 'antwerpen'
GROUP BY org_id, ip_from, DATE(timestamp)

但是它返回所有行的总金额,在这个例子中它返回

org_id = 1
org_name = test1
total = 4
date = 2019-03-05

org_id = 1
org_name = test1
total = 1
date = 2019-03-06

org_id = 2
org_name = test2
total = 1
date = 2019-03-06

虽然我希望它返回

org_id = 1
org_name = test1
total = 2
date = 2019-03-05

org_id = 1
org_name = test1
total = 1
date = 2019-03-06

org_id = 2
org_name = test2
total = 1
date = 2019-03-06

(因为在 2019-03-05 同一 IP 有 3 个事件,另一个 IP 有 1 个事件)

最佳答案

我认为您正在寻找 count(DISTINCT ip_from)

SELECT org_id, org_name, count(distinct ip_from) as total, DATE(timestamp) as date
FROM `org_profile_views_events`
WHERE region_org = 'antwerpen'
GROUP BY org_id, org_name, DATE(timestamp)

关于MySQL 查询按 IP 地址、用户 ID 和时间戳分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55028008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com