【问题标题】:How to get only one latest record using Stored Procedure如何使用存储过程仅获取一条最新记录
【发布时间】:2015-08-04 07:37:21
【问题描述】:

我有大约 7 条记录,其中两条记录具有相同的用户但具有不同的 MailLevel 和 SentDate 状态,所以我只想获得该特定用户的一条最新记录。任何人都可以帮助我如何执行 Sql 查询

请看下图清晰理解

http://s16.postimg.org/res5p5gmd/TESTPAGE.png

【问题讨论】:

  • 我看不到你的照片,请在问题中包含所有相关信息。
  • 像这样但更好的是,实际上将信息复制到问题中的文本中。
  • 你能看图吗?

标签: sql sql-server select stored-procedures


【解决方案1】:

子选择表在主选择上添加行号列和where子句

SELECT *  
FROM (
    SELECT MyTable.*, ROW_NUMBER() OVER (Partition BY UserId ORDER BY MailLevel DESC, SentDate DESC) AS R 
    FROM MyTable ) AS T 
WHERE T.R=1

【讨论】:

    【解决方案2】:

    如果您只想要这个特定用户的最新记录,您可以使用:

    CREATE PROCEDURE SelectLatestRecored
    
    @UserId int
    
    AS
    
    SELECT TOP 1 [Col1], [Col2] ,[Col3], [SendDate], [MailLevel]
    FROM [YourTable]
    ORDER BY [SentDate] DESC 
    WHERE [UserId] = @UserId
    
    GO
    

    如果你想要每个用户的最新记录:

    CREATE PROCEDURE SelectLatestRecoreds
    
    AS
    
    SELECT
      ROW_NUMBER() OVER (PARTITION BY [UserId] ORDER BY [SendDate] DESC) AS [RowNum],     
      [Col1], [Col2] ,[Col3], [SendDate], [MailLevel]
    
    FROM [YourTable]
    WHERE [RowNum] = 1
    
    GO
    

    【讨论】:

    • 好吧,我的 SP 没有输入参数,我需要所有用户列表的管理面板。在给定的图像中,用户使用不同的 MailLevel 和 SentDate 记录 2 次,但我只需要一个最近的 Record Via Date,即 MailLevel 2
    • 您的两个查询中的语法都无效
    • 您好,再次使用 Temp 表找到下面的查询我已经写了 SELECT TOP 1 ROW_NUMBER() OVER (PARTITION BY ProjectID, ORDER BY SentDate DESC) AS MailLevelStatus, CreatorName, PhoneNumber, EmailId, ProjectName, StageName FROM #GetDraftProjectForMailing ORDER BY SentDate DESC WHERE MailLevelStatus=1
    • 它确实有效,您在“PARTITION BY ProjectID”之后放置了一个多余的逗号,因此它无法编译,并添加了一个多余的 TOP,以及一个多余的 order by
    • 代码应如下所示:SELECT ROW_NUMBER() OVER (PARTITION BY ProjectID ORDER BY SentDate DESC) AS MailLevelStatus, CreatorName, PhoneNumber, EmailId, ProjectName, StageName FROM #GetDraftProjectForMailing WHERE MailLevelStatus = 1跨度>
    【解决方案3】:

    根据我对具有 2 次不同邮件级别和发送日期的用户记录的理解,它将选择最近的记录以及其他记录。

      select *
      from
       (
         SELECT
         ROW_NUMBER() OVER (PARTITION BY [creatorName] ORDER BY [SendDate] DESC)
         AS [RowNum],     
         *
         FROM [YourTable]
       )base
      WHERE [RowNum] = 1
    

    【讨论】:

    • 完美!!我需要它以及其他记录,你能在这个查询中帮助我吗? WHERE [RowNum] = 1 dosent work
    • 嘿,知道了,得到了上述查询的结果
    • 您能否将表格脚本或错误消息发送给我,以便我可以将解决方案发送给您。据我所知,上述代码适用于所有记录。
    • 你刚刚复制了我的答案
    • 你和我的一样哈哈。
    猜你喜欢
    • 1970-01-01
    • 2014-08-14
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    相关资源
    最近更新 更多