【问题标题】:Display the latest row only仅显示最新行
【发布时间】:2016-05-01 06:21:38
【问题描述】:

目标:
如果您检索任何重复数据,即列 secondid 中的数据,则您只能从最新日期检索一行。例如,在下面的数据中,我有两个不同的日期时间,我想从 secondid 列中的值 6 中检索数据“2016-05-02 07:34:14.377”。

问题:
我的代码似乎不起作用,我错过了什么。

信息:
里面有很多数据,你不能在代码中硬编码里面的值。

CREATE TABLE [dbo].[testing2](
    [id] [int] NOT NULL,
    [secondid] [int] NULL,
    [value] [varchar](30) NULL,
    [category] [int] NULL,
    [test_id] [int] NULL,
    [id_type] [int] NOT NULL,
    [Testing2Datetime] [datetime] not NULL,
 CONSTRAINT [PK_testing2] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]


INSERT INTO [test].[dbo].[testing2]
VALUES (3, 3, 'a' ,2 ,11 ,1, '2016-05-01 07:34:14.377');

INSERT INTO [test].[dbo].[testing2]
VALUES (4, 4, 'a' ,2 ,11 ,1, '2016-05-01 07:34:14.377');

INSERT INTO [test].[dbo].[testing2]
VALUES (5, 5, 'a' ,2 ,11 ,0, '2016-05-01 07:34:14.377');

INSERT INTO [test].[dbo].[testing2]
VALUES (6, 6, 'a' ,2 ,11 ,2, '2016-05-01 07:34:14.377');

INSERT INTO [test].[dbo].[testing2]
VALUES (7, 6, 'a' ,2 ,11 ,2, '2016-05-02 07:34:14.377');



select
    bb.secondid,
    max(bb.Testing2Datetime)
from [dbo].[testing2] bb
group by
    bb.secondid,
        bb.Testing2Datetime

【问题讨论】:

    标签: sql sql-server tsql select max


    【解决方案1】:

    Testing2Datetime 每个Testing2Datetime 的最大值是Testing2Datetime 本身。您应该将其从 group by 子句中删除,并仅检索每个 secondid 的最大值:

    select
        bb.secondid,
        max(bb.Testing2Datetime)
    from [dbo].[testing2] bb
    group by
        bb.secondid -- Here!
    

    【讨论】:

    • 感谢您的帮助!
    【解决方案2】:

    Group by 中删除bb.Testing2Datetime

    select
        bb.secondid,
        max(bb.Testing2Datetime) as [Max_Testing2Datetime]
    from [dbo].[testing2] bb
    group by
        bb.secondid
    

    甚至这个(Row_Number窗口函数)

    select * 
    from 
    (
    select
        bb.secondid,
        bb.Testing2Datetime,
        Row_number()over(partition by bb.secondid order by bb.Testing2Datetime desc) as RN
    from [dbo].[testing2] bb
    ) A
    Where RN = 1
    

    【讨论】:

    • 感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    相关资源
    最近更新 更多