Sql 在CreatedDate字段的帮助下获取插入的最新行
我正在尝试根据其CreatedDate将最新记录插入SQL表中。例如,在下表中,我想得到第三行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
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