Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在CreatedDate字段的帮助下获取插入的最新行_Sql_Sql Server 2005 - Fatal编程技术网

Sql 在CreatedDate字段的帮助下获取插入的最新行

Sql 在CreatedDate字段的帮助下获取插入的最新行,sql,sql-server-2005,Sql,Sql Server 2005,我正在尝试根据其CreatedDate将最新记录插入SQL表中。例如,在下表中,我想得到第三行 A B C 2009-05-04 19:30:52.847 A B D 2009-05-04 19:30:55.050 A B E 2009-05-04 19:30:57.003 我有一个有效的查询,但我想知道是否有更好的方法来实现相同的结果。下面是我现在用于测试的表、数据和查询。有没有更好的办法 CREATE TABLE TestTable ( Column

我正在尝试根据其CreatedDate将最新记录插入SQL表中。例如,在下表中,我想得到第三行

A   B   C   2009-05-04 19:30:52.847
A   B   D   2009-05-04 19:30:55.050
A   B   E   2009-05-04 19:30:57.003
我有一个有效的查询,但我想知道是否有更好的方法来实现相同的结果。下面是我现在用于测试的表、数据和查询。有没有更好的办法

CREATE TABLE TestTable (
  ColumnA     NVARCHAR(10),
  ColumnB     NVARCHAR(10),
  ColumnC     NVARCHAR(10),
  CreatedDate DATETIME    DEFAULT Getutcdate())

INSERT INTO TestTable(ColumnA, ColumnB, ColumnC) VALUES ('A', 'B', 'C');
INSERT INTO TestTable(ColumnA, ColumnB, ColumnC) VALUES ('A', 'B', 'D');
INSERT INTO TestTable(ColumnA, ColumnB, ColumnC) VALUES ('A', 'B', 'E');

SELECT *
FROM   TestTable
WHERE  CreatedDate = (SELECT   Max(CreatedDate)
                      FROM     TestTable
                      WHERE    ColumnA = 'A'
                               AND ColumnB = 'B'
                      GROUP BY ColumnA,
                               ColumnB) 
谢谢

你也可以写

SELECT top 1 *
FROM   TestTable
order by CreatedDate desc

给这只猫剥皮有多种方法。有些尚未发布:

SELECT
     T1.column_a,
     T1.column_b,
     T1.column_c,
     T1.created_date
FROM
     dbo.Test_Table T1
WHERE
     T1.column_a = 'A' AND
     T1.column_b = 'B' AND
     NOT EXISTS
     (
          SELECT
               *
          FROM
               dbo.Test_Table T2
          WHERE
               T2.column_a = T1.column_a AND
               T2.column_b = T1.column_b AND
               T2.created_date > T1.created_date
     )


我喜欢外部连接解决方案-我没有想到。但是显示估计执行计划发现它比我通常解决这个问题的方法更昂贵。(可能与我表格上的索引有关-您的里程数可能会有所不同)请尝试一下:

SELECT
    T1.ColumnA,
    T1.ColumnB,
    T1.ColumnC,
    T1.CreatedDate
FROM
    dbo.TestTable T1
    JOIN (SELECT ColumnA,
                 ColumnB,
                 max(CreatedDate) MaxDate
          FROM
                 dbo.TestTable
          GROUP BY ColumnA,
                   ColumnB) T2
    ON  T1.ColumnA     = T2.ColumnA
    AND T1.ColumnB     = T2.ColumnB
    AND T1.CreatedDate = T2.MaxDate 
这只是为了防止
CreatedDate
中存在重复项,并且您需要所有这些重复项

否则,只需放下带有领带的

SELECT
    T1.ColumnA,
    T1.ColumnB,
    T1.ColumnC,
    T1.CreatedDate
FROM
    dbo.TestTable T1
    JOIN (SELECT ColumnA,
                 ColumnB,
                 max(CreatedDate) MaxDate
          FROM
                 dbo.TestTable
          GROUP BY ColumnA,
                   ColumnB) T2
    ON  T1.ColumnA     = T2.ColumnA
    AND T1.ColumnB     = T2.ColumnB
    AND T1.CreatedDate = T2.MaxDate 
SELECT TOP 1 WITH TIES *
FROM TestTable
WHERE ColumnA = 'A'
  AND ColumnB = 'B'
ORDER BY CreatedDate DESC