【问题标题】:Get the first record from the result set从结果集中获取第一条记录
【发布时间】:2012-02-14 09:21:52
【问题描述】:

我只想选择突出显示的记录。我怎么能在 sql 中,最好在 linq 中做到这一点。有一个单独的表 EmpEmployeeIDPK。 这是我的表的架构

【问题讨论】:

  • 所以你想对 EmployeeID 进行分组,但是你用什么来决定“第一个”是什么?
  • @NeilKnight 看起来我在正确地请求代码,但事实并非如此,我尝试使用 Rank 但无法安静地得到结果
  • @Ray 我想得到FromDate,但是有重复的行不是不想要的,但是每个重复行的第一行的FromDate 将用作应用程序中的加入日期
  • @john 我想让你定义“第一”。从您的示例来看,它不是最低或最高的,那么您首先使用什么标准来决定?
  • @john,也许我很密集,但我仍然看不到您用来首先决定的任何标准?如果您可以向我们提供您用来获取结果显示的查询,也许会有所帮助?或者,如果这是直接的select * from History,那么您需要考虑首先真正意味着什么。 DisignationHistoryIDs [原文如此] 是连续的,你想要最低的吗?但是,您突出显示的行将不正确。

标签: sql linq tsql


【解决方案1】:

我可能会走得更远,但我相信以下陈述满足您的要求

SELECT *
FROM   (
         SELECT e.EmployeeID, h.FromDate, h.ToDate
                , rn = ROW_NUMBER() OVER (PARTITION BY e.EmployeeID ORDER BY DesignationID DESC)
         FROM   employee e
                INNER JOIN history h ON h.EmployeeID = e.EmployeeID
       ) eh
WHERE rn = 1

【讨论】:

  • 历史表包含员工加入第一天起的任命历史。在每次指定更改时,都会在历史表中添加一个新行。我想要的是获取结果集的第一行,以便找到员工加入的日期,所以当我加入员工表和历史表时,它会显示同一员工的多行 FromDate第一行决定加入日期...
  • 我试图运行您的查询,但它给了我以下错误The column 'EmployeeID' was specified multiple times for 'eh'.
  • @john - 您应该将括号内的SELECT * 替换为您想要返回的列。我已经编辑了我的答案。查询现在应该可以毫无问题地运行,但我没有按照您的示例包含 all 列。
  • 你无法想象我对你有多感激,我希望我能给你一千次投票...tnx alot
【解决方案2】:

试试:

select * from
(select t.*, 
        row_number() over (partition by EmployeeID order by FromDate) as rn) sq
where rn = 1

【讨论】:

  • 这是我最初发布的内容,但不适用于 ID 256、257。
  • 应该适用于 256 而不是 257,如屏幕截图所示。这一切都取决于约翰发布一些关于他实际上想要什么的澄清......
【解决方案3】:

无法确切地看到您的要求。突出显示的 ID 只是唯一的事件。所以你可以很容易地做到这一点:

SELECT DISTINCT EmployeeID FROM MyTable

【讨论】:

  • DISTINCT 将准确地为您提供您以黄色突出显示的 ID 列表。这就是你要求的。如果您可以更清楚自己要做什么,也许我可以提出另一个建议。
【解决方案4】:

不确定您在寻找什么,但可以尝试这样的事情(不需要子查询,并且应该可以在大多数 DBMS 上运行,尽管它看起来像您正在运行的 SQL Server):

select t1.DisignationHistoryIDs, t1.employeeId, t1.fromDate from history t1
left join history t2
on t1.employeeId = t2.employeeId and t1.fromDate > t2.fromDate
where t2.fromDate is null

这应该可以获取最旧的 fromDate。要获取最新的日期,只需将 > 更改为 <

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    相关资源
    最近更新 更多