use*_*020 6 sql sql-server group-by aggregate
我们有一个表格,可以记录每个表格的刷卡记录employee。我正在尝试编写一个查询,以通过今天的第一次滑动来获取不同员工记录的列表。
我们将滑动日期信息保存在datetime列中。这是我的查询的抛出异常。
select distinct
[employee number], [Employee First Name]
,[Employee Last Name]
,min([DateTime])
,[Card Number]
,[Reader Name]
,[Status]
,[Location]
from
[Interface].[dbo].[VwEmpSwipeDetail]
group by
[employee number]
where
[datetime] = CURDATE();
Run Code Online (Sandbox Code Playgroud)
出现错误:
在选择列表中,“ Interface.dbo.VwEmpSwipeDetail.Employee名”列无效,因为它不包含在聚合函数或GROUP BY子句中。
有什么帮助吗?
提前致谢。
错误说明了一切:
...“雇员名字”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中
这样说,还有其他列也需要注意。
将返回的列减少为仅需要的列,或者将这些列包含在GROUP BY子句中,或者添加聚合函数(MIN / MAX)。另外,您的WHERE子句应放在之前GROUP BY。
尝试:
select distinct [employee number]
,[Employee First Name]
,[Employee Last Name]
,min([DateTime])
,[Card Number]
,min([Reader Name])
from [Interface].[dbo].[VwEmpSwipeDetail]
where CAST([datetime] AS DATE)=CAST(GETDATE() AS DATE)
group by [employee number], [Employee First Name], [Employee Last Name], [Card Number]
Run Code Online (Sandbox Code Playgroud)
我已经删除了status,location因为这很可能会返回不同的值。为了返回此数据,您可能需要一个首先获取SwipeDetails表的唯一ID的子查询(或CTE),然后您可以从该列表中加入其他数据,例如:
SELECT [employee number],[Employee First Name],[Employee Last Name].. -- other columns
FROM [YOUR_TABLE]
WHERE SwipeDetailID IN (SELECT MIN(SwipeDetailsId) as SwipeId
FROM SwipeDetailTable
WHERE CAST([datetime] AS DATE)=CAST(GETDATE() AS DATE)
GROUP BY [employee number])
Run Code Online (Sandbox Code Playgroud)
请尝试以下查询:
select distinct [employee number],[Employee First Name]
,[Employee Last Name]
,min([DateTime])
,[Card Number]
,[Reader Name]
,[Status]
,[Location] from [Interface].[dbo].[VwEmpSwipeDetail] group by [employee number],[Employee First Name]
,[Employee Last Name]
,[Card Number]
,[Reader Name]
,[Status]
,[Location] having [datetime]=GetDate();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
56209 次 |
| 最近记录: |