计算时间间隔2中出现的时间间隔1中的条目数 - SQL

时间:2014-07-11 12:35:39

标签: mysql sql sql-server

我是新来的,试图查找我的问题的答案,但无法找到任何内容。我目前正在学习如何使用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')

2 个答案:

答案 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'