【问题标题】:New SQL user - I'm trying to extract the latest record in my query. Accountant new to SQL新 SQL 用户 - 我正在尝试提取查询中的最新记录。 SQL 新手会计
【发布时间】:2020-11-25 02:25:44
【问题描述】:

对于每个 AbsenceBalance.AbsenceTypesUID,我想返回每个 AbsenceBalance.EmployeeUID 的最新记录 AbsenceBalance.BalanceTime

我尝试过 select max,但它只返回整个表的最新条目,而不是 AbsenceBalance.AbsenceTypesUID 或 AbsenceBalance.EmployeeUID

这是我的查询

SELECT TOP (1000) 
AbsenceBalance.[UID],
AbsenceBalance.BalanceTime,
AbsenceBalance.AbsenceTypesUID,
AbsenceBalance.Mins,
Employee.FullName,
Employee.FirstName,
Employee.LastName,
AbsenceBalance.EmployeeUID,
absencetypes.LongName

  from [RiteqDB].[dbo].[AbsenceBalance]


  
  
  LEFT JOIN [RiteqDB].[dbo].Employee on AbsenceBalance.EmployeeUID = Employee.UID

  LEFT JOIN [RiteqDB].[dbo].AbsenceTypes on absencebalance.AbsenceTypesUID = absencetypes.UID 

  where AbsenceBalance.[UID] = (select max (AbsenceBalance.[UID]) from [RiteqDB].[dbo].[AbsenceBalance] where AbsenceBalance.AbsenceTypesUID = AbsenceBalance.AbsenceTypesUID)

  --where Select Max(v) from (values (AbsenceBalance.BalanceTime)

  order by FullName, AbsenceTypesUID

【问题讨论】:

  • 您正在使用哪些 rdbms?
  • 最后是指最近的吗? “最后添加的记录?”或者最后一个,在所有记录的列表中,我想要输入的第一个?

标签: sql


【解决方案1】:

听起来您可能需要link 的组,然后在 where 中使用内部选择(就像您一样)或将其与内部连接一起使用。

SELECT 
Max(AbsenceBalance.[UID]),
AbsenceBalance.AbsenceTypesUID,
AbsenceBalance.EmployeeUID,

from [RiteqDB].[dbo].[AbsenceBalance]

GROUP BY AbsenceTypesUID, EmployeeUID

【讨论】:

    【解决方案2】:
    ;with cte as (
    SELECT TOP (1000) AB.[UID]
                     ,AB.BalanceTime
                     ,AB.AbsenceTypesUID
                     ,AB.Mins
                     ,E.FullName
                     ,E.FirstName
                     ,E.LastName
                     ,AB.EmployeeUID
                     ,AT.LongName
                     , ROW_NUMBER() OVER(PARTITION BY AB.[UID], AB.EmployeeUID order by AB.BalanceTime DESC) AS RUN
    FROM [RiteqDB].[dbo].[AbsenceBalance] AB
    LEFT JOIN [RiteqDB].[dbo].Employee E ON AB.EmployeeUID = E.UID
    LEFT JOIN [RiteqDB].[dbo].AbsenceTypes AT ON AB.AbsenceTypesUID = AT.UID    
    )
    select * from cte
    where RUN = 1
    

    【讨论】:

    • 谢谢赛!即使我不知道它是如何工作的,它仍然有效。
    • 为了您的理解,请尝试仅运行包含在 CTE 中的脚本(第 2 到 13 行),并尝试关注 Run 列并了解它在做什么。也许选择前 10 或 20 名。
    【解决方案3】:

    在您的 where 条件下,您与自身进行比较可能是问题所在。

    select max (AbsenceBalance.[UID]) from [RiteqDB].[dbo].[AbsenceBalance] 
    where AbsenceBalance.AbsenceTypesUID = AbsenceBalance.AbsenceTypesUID
    

    以下是错误的

    AbsenceBalance.AbsenceTypesUID = AbsenceBalance.AbsenceTypesUID
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-23
      • 2016-10-15
      • 2012-05-12
      • 2020-07-21
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 2021-11-11
      相关资源
      最近更新 更多