0
Developers  Name                    LastLogin
Dev123456A  Paul Wilson             2013-04-10
Dev123456B  Actor One               2013-05-01
Dev123456C  Actor Two               2013-04-26
Dev123456D  Actor Three             2013-06-03
Dev123456E  Actor Four              2013-03-15
Dev123456F  Actor Five              2013-06-05

我有这个数据.. 我想只选择一个月没有登录的开发者。我需要脚本让它工作。

我试过这个:(这个有效)更新

SELECT  DevID, UserName, LastLogin
FROM    Developer
WHERE   LastLogin <= DateAdd(m,-1,GetDate())
4

2 回答 2

1

我怀疑你真正想要的是前几个月的第一个日期时间(假设 LastLogin 是一个日期时间列。

SELECT  DevID, UserName, LastLogin
FROM    Developer
WHERE   LastLogin < DATEADD(month,-1, DATEDIFF(day, 0, GETDATE()))

所以今天,现在我们将与 '2013-05-06 00:00:00.000' 进行比较,而不是一个月前的确切时间(现在)。因此,该日期的任何 LastLogin “计数”,而不是那些在该日期之前的时间实际上是之前的(在时间上但不是日期)。

如果您需要排除该日期,您可以在比较日期中添加一天。

DATEADD(day, 1,DATEADD(month,-1, DATEDIFF(day, 0, GETDATE())))

返回“2013-05-07 00:00:00.000”“现在”,所以小于适用于此。

于 2013-06-06T23:43:33.910 回答
1

要获取上个月未登录的开发者列表,您应该可以使用:

select DevID
from yt
group by developers
having max(lastlogin) < DateAdd(mm,-1,cast(GETDATE() as date));

请参阅带有演示的 SQL Fiddle

如果您想知道开发人员上次登录的时间,那么您可以使用子查询:

select t.DevID, t.UserName, t.lastlogin
from yt t
inner join
(
  select DevID, max(lastlogin) lastlogin
  from yt
  group by DevID
  having max(lastlogin) < DateAdd(mm,-1,cast(GETDATE() as date))
) t2
  on t.DevID = t2.DevID
  and t.lastlogin = t2.lastlogin;

请参阅带有演示的 SQL Fiddle

于 2013-06-06T22:53:01.960 回答