我是新来的,试图查找我的问题的答案,但无法找到任何内容。我目前正在学习如何使用SQL查询,并想知道如何计算两个时间间隔内出现的唯一值的数量?
我有两列;一个是timestamp
,而另一个是customer id
。我想要做的是检查,例如,时间间隔A中出现的客户数量,让我们说January 2014 - February 2014
。然后我想看看有多少这些也出现在我指定的另一个时间间隔中,例如February 2014-April 2014
。如果总样本是2 people
,他们都在1月份买了东西,而其中只有一个在4月底之前买了其他东西,那么这个数字就是1。
我是一个初学者,并尝试了下面的查询,但它显然不会返回我想要的内容,因为每个条目只有一个时间戳,因此不可能在两个时间间隔内。
SELECT
count(customer_id)
FROM db.table
WHERE time >= date('2014-01-01 00:00:00')
AND time < date('2014-02-01 00:00:00')
AND time >= date('2014-02-01 00:00:00')
AND time < date('2014-05-01 00:00:00')
答案 0 :(得分:1)
试试这个。
select count(distinct t.customer_id) from Table t
INNER JOIN Table t1 on t1.customer_id = t.customer_id
and t1.time >= '2014-01-01 00:00:00' and t1.time<'2014-02-01 00:00:00'
where t.time >='2014-02-01 00:00:00' and t.time<'2014-05-01 00:00:00'
答案 1 :(得分:0)
这是使用内部选择中的条件分组执行此操作的一种方法。
Select Case
When GroupBy = 1 Then 'January - February 2014'
When GroupBy = 2 Then 'February - April 2014'
End As Period,
Count (Customer_Id) As Total
From
(
SELECT Customer_Id,
Case
When Time Between '2014-01-01' And '2014-02-01' Then 1
When Time Between '2014-02-01' And '2014-04-01' Then 2
Else -1
End As GroupBy
From db.Table
) D
Where GroupBy <> -1
Group By GroupBy
修改:抱歉,误读了这个问题。这将显示与这两个时间范围重叠的那些:
Select Count(Customer_Id)
From db.Table t1
Where Exists
(
Select Customer_Id
From db.Table t2
Where t1.customer_id = t2.customer_id
And t2.Time Between '2014-02-01' And '2014-04-01'
)
And t1.Time Between '2014-01-01' And '2014-02-01'