Mysql 如何在SQL中计算频率

Mysql 如何在SQL中计算频率,mysql,Mysql,我需要了解如何计算一个帐户在7天时间戳内重复的频率。例如:2/3/15 3:47到2/4/15 4:34下午在7天内,因此第一次出现的时间为0,相同7天内的第二次出现的时间为1,相同7天内的第三次出现的时间为2,依此类推 使用用户定义的变量来跟踪1周间隔的开始和一周内的计数器。当创建日期超过1周时,重置变量 Creation Date Account Number FREQUENCY - 7 2/3/15 3:47 PM 7522461

我需要了解如何计算一个帐户在7天时间戳内重复的频率。例如:2/3/15 3:47到2/4/15 4:34下午在7天内,因此第一次出现的时间为0,相同7天内的第二次出现的时间为1,相同7天内的第三次出现的时间为2,依此类推

使用用户定义的变量来跟踪1周间隔的开始和一周内的计数器。当创建日期超过1周时,重置变量

Creation Date   Account Number         FREQUENCY - 7
2/3/15 3:47 PM     7522461                    0
2/4/15 9:25 AM     7522461                    1
2/4/15 4:34 PM     7522461                    2
2/23/15 3:08 PM    7522461                    0
3/4/15 9:58 AM     7522461                    0
3/4/15 4:55 PM     7522461                    1
3/5/15 2:27 PM     7522461                    2
3/6/15 7:28 AM     7522461                    3
3/6/15 1:33 PM     7522461                    4
3/9/15 8:51 AM     7522461                    5

如果是MSSQL,请尝试以下操作

SELECT CreationDate, AccountNumber,
       @frequency := IF(CreationDate > DATE_ADD(@startdate, INTERVAL 7 DAY), 0, @frequency + 1) AS Frequency,
       @startdate := IF(CreationDate > DATE_ADD(@startdate, INTERVAL 7 DAY), CreationDate, @startDate)
FROM (SELECT CreationDate, AccountNumber
      FROM YourTable
      ORDER BY CreationDate) AS x
CROSS JOIN (SELECT @startdate := DATE('1900-01-01'), @frequency := 0) AS vars

如果数据不清楚,我可以通过电子邮件发送表格。你会将其发送到哪里?看起来你只需要根据两个日期之间的条件进行计数。或者差异小于7天。Msg 102,级别15,状态1,第2行“:”附近的语法不正确。Msg 137,级别15,状态2,第2行必须声明标量变量@startdate。Msg 137,级别15,状态2,第3行必须声明标量变量@startdate。Msg 156,15级,状态1,第6行关键字“ORDER”附近语法不正确。Msg 102,级别15,状态1,第7行“:”附近的语法不正确。这些看起来不像MySQL错误消息。您确定这就是您正在使用的RDBMS吗?Msg 174,级别15,状态1,第3行datediff函数需要3个参数。-错误是MySQL还是MSSQL服务器?
SELECT CreationDate, AccountNumber,  
      (SELECT COUNT(*) 
         FROM YourTable t2 
        WHERE (DATEDIFF(day, t2.CreationDate, t1.CreationDate ) < 7 AND 
                  (DATEDIFF(day, t2.CreationDate, t1.CreationDate) > 0 OR 
                       (DATEDIFF(day, t2.CreationDate, t1.CreationDate) = 0 
                         AND DATEDIFF(second, t2.CreationDate, t1.CreationDate) > 0 
                       )
                   )
               ) 
          AND t2.AccountNumber = t1.AccountNumber) 
         FROM YourTable t1 
        order by  AccountNumber, CreationDate