SQL中具有单独条件的筛选器列
我试图从表中查找登录和注销时间。我能够计算出登录和注销时间 你可以看到下面的链接 解决办法是SQL中具有单独条件的筛选器列,sql,sql-server,Sql,Sql Server,我试图从表中查找登录和注销时间。我能够计算出登录和注销时间 你可以看到下面的链接 解决办法是 SELECT DISTINCT AGENTID, CAST(EVENTDATETIME AS date) AS [Date], MIN([EVENTDATETIME]) OVER (PARTITION BY [AGENTID], CAST(EVENTDATETIME AS date) ORDER BY [EVENTTYPE]) AS first_login, MAX([EVENTDATETI
SELECT DISTINCT AGENTID, CAST(EVENTDATETIME AS date) AS [Date],
MIN([EVENTDATETIME]) OVER (PARTITION BY [AGENTID], CAST(EVENTDATETIME AS date) ORDER BY [EVENTTYPE]) AS first_login,
MAX([EVENTDATETIME]) OVER (PARTITION BY [AGENTID], CAST(EVENTDATETIME AS date) ORDER BY [EVENTTYPE] DESC) AS last_logout,
FROM #temp
现在,我假设通过EVENTTYPE=1第一次登录和最后一次注销通过EVENTTYPE=1执行此筛选列
您能建议一种方法吗。在
MIN
和MAX
窗口函数中使用case
表达式
SELECT DISTINCT
AGENTID,
CAST(EVENTDATETIME AS date) AS [Date],
MIN(CASE WHEN EVENTTYPE = 1 THEN [EVENTDATETIME] END) OVER(PARTITION BY [AGENTID], CAST(EVENTDATETIME AS date)) AS first_login,
MAX(CASE WHEN EVENTTYPE = 1 THEN [EVENTDATETIME] END) OVER(PARTITION BY [AGENTID], CAST(EVENTDATETIME AS date)) AS last_logout
FROM #temp
如果无法在创建#temp时进行筛选,则可以在子查询中使用它。将from#temp替换为from(选择…from#temp Where filter…)