Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL中具有单独条件的筛选器列_Sql_Sql Server - Fatal编程技术网

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…)