gpt4 book ai didi

mysql - SQL:选择唯一日期、该日期的总计、该日期的总计以及另一个参数

转载 作者:行者123 更新时间:2023-11-29 13:05:17 25 4
gpt4 key购买 nike

在 SQL 中,我试图获得 3 个类别的返回值。

  1. 独特的日期
  2. 当天访问人数为 1。
  3. 1 天内的访问次数以及在特定日期的访问次数

我的 SQL 有这个

SELECT
DISTINCT DATEADD(dd, 0, DATEDIFF(dd, 0, visit_date)) as theday,
(SELECT count(DISTINCT visit_id)) as uniques,
(SELECT count(DISTINCT visit_id)
FROM visitors
WHERE visit_id IN (
SELECT DISTINCT visit_id
FROM visitors
WHERE (visit_date >= '2014-03-29 00:00:00.000'
AND visit_date <= '2014-03-30 00:00:00.000')
)
) as visited_again
FROM visitors
WHERE visit_date >= '2014-01-01 00:00:00.000'
GROUP BY DATEADD(dd, 0, DATEDIFF(dd, 0, visit_date))
ORDER BY theday DESC;

它非常适合给我 #1 和 #2,但第三个只给我一个在每个日期重复的唯一数字。

上面的 SQL 返回的结果如下:

   theday    |    uniques    |    visited_again
-------------+---------------+------------------
2014-03-30 | 900000 | 84450
2014-03-29 | 789433 | 84450
2014-03-28 | 823010 | 84450
2014-03-27 | 901101 | 84450
2014-03-26 | 773556 | 84450
2014-03-25 | 345789 | 84450

最佳答案

在您尝试计算重复访问次数的地方,外部查询中的各个访问 ID 值不再可用,因此您无法单独查看每个访问 ID 值。试试这个:

DECLARE @d DATETIME;
SET @d = '2014-03-30 00:00:00.000';

WITH V(visit_id,theday,special_date_flag) AS (
SELECT DISTINCT
visit_id,
visit_date,
CASE WHEN visit_id IN (
SELECT visit_id FROM visitors
WHERE visit_date >= @d AND visit_date < @d+1
--note change to select 1, not 2 dates here!
) THEN 1 ELSE NULL END
FROM visitors
)
SELECT
theday,
count(visit_id) as uniques,
count(special_date_flag) as visited_again
FROM V
WHERE thedate >= '2014-01-01 00:00:00.000'
GROUP BY theday
ORDER BY theday DESC

此查询首先创建一个 (visit_id, theday) 值的虚拟表,其中每行都有第三列,用于指示特定的 Visit_id 是否是特殊日期的其中之一。

还有其他方法可以做到这一点 - 您实际上只需要每个访问 ID 的标志,而不是 (visit_id,theday) 对,但这更容易编写。

关于mysql - SQL:选择唯一日期、该日期的总计、该日期的总计以及另一个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22799188/

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