【发布时间】:2016-03-04 11:43:51
【问题描述】:
我在一个数据库中有两个表。一个叫用户,一个叫天。 Users 表有一个名为 ID 的列,其中包含一些数字和一个 ActiveUser 列,其中包含 0(非活动)或 1(活动)。 Days 表有一个名为 UserID 的列,其中包含与 Users 表中的 ID 列相同的数字。它还有一个名为 Day 的列,其中包含诸如“2015-01-01 00:00:00:000”之类的信息。
用户表:
ID | ActiveUser
-------------------
10 | 0
11 | 1
12 | 1
13 | 0
天数表:
User_ID | Day
------------------
10 | 2010-06-24 00:00:00.000
11 | 2011-07-05 00:00:00.000
12 | 2008-06-19 00:00:00.000
13 | 2010-06-20 00:00:00.000
10 | 2009-09-02 00:00:00.000
12 | 2010-08-15 00:00:00.000
11 | 2011-05-06 00:00:00.000
13 | 2012-04-25 00:00:00.000
我正在尝试创建一个查询,以查找为每个活跃用户列出的最近日期。因此,使用上面的表格,我尝试进行的查询应该给我以下信息:
Day
------
2011-07-05 00:00:00.000
2010-08-15 00:00:00.000
这对应于用户 ID 为 11 和 12 的两个 Active 用户,这两个用户都有两个 Day 条目,但查询选择了最近的日期。
我是 SQL 新手,我得到的最接近的是下面,它没有考虑用户表(也使用 https://stackoverflow.com/a/2411703/2480598 作为模板):
select Days.Day
from Days
inner join (select User_ID, max(day) as MaxDay
from Days
group by User_ID
) tm on Days.User_ID = tm.User_ID and Days.Day = tm.MaxDay
这给了我活跃和非活跃用户的日期列表。
【问题讨论】:
-
您使用的是哪个 DBMS?后格雷斯?甲骨文?
-
微软 SQL 服务器。更新了标签以反映这一点,对此感到抱歉。标题也错了。
标签: sql sql-server