当前位置: 代码迷 >> Sql Server >> 怎么写下面的SQL,小白求指导
  详细解决方案

怎么写下面的SQL,小白求指导

热度:29   发布时间:2016-04-24 10:05:12.0
如何写下面的SQL,小白求指导 ~
CREATE TABLE [dbo].[DeviceDetails](
[DeviceDetailsId] [int] IDENTITY(1,1) NOT NULL,
[InDate] [datetime] NOT NULL,
[OutDate] [datetime] NOT NULL,
[DeviceId] [int] NOT NULL,
[Uuid] [nvarchar](50) NOT NULL,
}



3 2014/6/3 9:44:56 2014/6/5 15:37:40 3 SC67A3623F2B4D1EB6F7C35BEB9E791A
4 2014/8/6 9:44:56 2014/8/7 15:37:40 3 SC67A3623F2B4D1EB6F7C35BEB9E791A
5 2014/8/3 9:44:56 2014/8/6 15:35:40 1 SC67A3623F2B4D1EB6F7C35BEB9E791A
6 2014/8/7 9:44:56 2014/8/9 15:45:40 1 SC67A3623F2B4D1EB6F7C35BEB9E791A
7 2014/4/3 9:44:56 2014/4/4 15:45:40 4 SC67A3623F2B4D1EB6F7C35BEB9E791A
8 2014/8/3 9:44:56 2014/8/7 15:45:40 4 SC67A3623F2B4D1EB6F7C35BEB9E791A
9 2014/8/3 9:44:56 2014/8/7 12:45:40 6 SC67A3623F2B4D1EB6F7C35BEB9E791A
10 2014/8/3 9:44:56 2014/8/7 5:45:40 8 SC67A3623F2B4D1EB6F7C35BEB9E791A

假定以上是全部数据。都从第一次来店开始算时间。

则deviceId=3的频率是3个月来了两次,
deviceId=1的频率是1周来了两次,
deviceId=4的频率是4月来了两次,
deviceId=6的频率是1周来了1次,
deviceId=8的频率是1周来了1次,


那么他们的平均天数,应该是 总时间/所次数   

总时间,是从某个deviceId一次来店开始算时间到最后一次来店的时候开始算的。
如果仅有一次,如果deviceId=6这个人。他的最后一次来店时间,就以getdate()当前时间-2014/8/3 9:44:56算

我的思路应该是对的。但是代码不会写~~郁闷~
------解决方案--------------------
select DeviceId,
count(*)/(case when max(InDate)=min(InDate) then getdate()-min(InDate) else max(InDate)-min(InDate)) as 频率
from  [dbo].[DeviceDetails]
group by    [DeviceId]

------解决方案--------------------
select DeviceId,
count(*)/
(case when max(InDate)=min(InDate) then getdate()-min(InDate) 
else max(InDate)-min(InDate) end) as 频率
from  [dbo].[DeviceDetails]
group by    [DeviceId]

------解决方案--------------------
把日期折为 年月旬,然后group by 它
  相关解决方案