如何在 SQL 中获取最新更新的记录?
SQL Server 是一个通用的数据库,它是许多软件行业中使用最多的关系数据库。在本文中,我们将看到如何在 SQL 中获取最新的更新记录。
步骤 1: 数据库创建
命令来创建数据库。这里的 GEEKSFORGEEKS 是数据库的名字。
查询:
CREATE DATABASE GEEKSFORGEEKS;
步骤 2: 利用创建数据库。
USE GEEKSFORGEEKS;
输出:
- 为了获得最新更新的记录,我们应该在任何表中都有一个带有“时间戳”列的列,如“上次更新”,当新插入一条记录时,它应该获得该列的当前时间戳值。这将有助于创建记录
- 同时,我们应该有一个触发器来更新“上次更新”列的值,这将使用最新的时间戳更新记录。
步骤 3: 表格创建
CREATE TABLE [dbo].[AuthorsNew](
[ID] [int] IDENTITY(1,1) NOT NULL,
[AuthorName] [nvarchar](20) NULL,
[Age] [int] NULL,
[Skillsets] [nvarchar](max) NULL,
[NumberOfPosts] [int] NULL,
[isActiveAuthor] [bit] NULL,
[lastUpdatedBy] DATETIME
);
步骤 4: 在表中插入记录
INSERT INTO AuthorsNew (AuthorName,Age,Skillsets,
NumberOfPosts,isActiveAuthor,lastUpdatedBy)
VALUES ('Rachel',25,'Java,Python,.Net',
20,1,'2021-11-12:56:40');
INSERT INTO AuthorsNew (AuthorName,Age,Skillsets,
NumberOfPosts,isActiveAuthor,lastUpdatedBy)
VALUES ('Monica Geller',25,'Android,Python,.Net'
,15,1,'2021-11-15 14:53:32');
INSERT INTO AuthorsNew (AuthorName,Age,Skillsets,
NumberOfPosts,isActiveAuthor,lastUpdatedBy)
VALUES ('Phoebe',25,'IOS,GO,R',5,1,
'2021-11-07 12:56:40');
INSERT INTO AuthorsNew (AuthorName,Age,Skillsets,
NumberOfPosts,isActiveAuthor,lastUpdatedBy)
VALUES ('Chandler',25,'Java,Python,GO',15,1,
'2021-11-09 12:56:40');
INSERT INTO AuthorsNew (AuthorName,Age,Skillsets,
NumberOfPosts,isActiveAuthor,lastUpdatedBy)
VALUES ('Ross',25,'IOS,Android',20,1,
'2021-11-11 12:56:40');
INSERT INTO AuthorsNew (AuthorName,Age,Skillsets,
NumberOfPosts,isActiveAuthor,lastUpdatedBy)
VALUES ('Joey',25,'Android',3,0,'2021-11-15
12:56:40');
INSERT INTO AuthorsNew (AuthorName,Age,Skillsets,
NumberOfPosts,isActiveAuthor,lastUpdatedBy)
VALUES ('Monica Geller',25,'Android,Python,.Net',
15,1,'2021-11-15 14:53:32');
第 5 步:从 AuthorsNew 表中获取数据。
查询:
SELECT * FROM AuthorsNew;
输出:
“LastUpdatedBy”列在数据被插入/更新的时间有数据。首先,从日期时间中单独获取日期部分。
查询:
SELECT CONVERT(VARCHAR(10),
lastUpdatedBy, 111)
from AuthorsNew;
获取最新记录:
示例 1: 使用 TOP
查询:
SELECT TOP 1 * FROM AuthorsNew ORDER BY
CONVERT(VARCHAR(10), lastUpdatedBy, 111) DESC
输出:
示例 2: 使用 MAX
查询:
SELECT * FROM AuthorsNew WHERE
CONVERT(VARCHAR(10), lastUpdatedBy, 111) =
(SELECT MAX(CONVERT(VARCHAR(10),
lastUpdatedBy, 111)) FROM AuthorsNew )
输出:
示例 3: 使用日期添加功能
为了得到前一天、前一周、前一个月等。,数据,我们可以使用 DATEADD 函数。
语法:
SELECT column_name, ... FROM table_name
WHERE date_column >= DATEADD
day,-<n days>, GETDATE())
- 函数的作用是:从当前日期中减去 n 天。这里的“天”指定天数
- 将获得的结果与日期列进行比较以获得结果。
假设为了获得我们的表在当前日期或 1 或 2 天之前的数据,我们可以执行以下操作。即最近 2 天的数据可以通过下面的查询获得。
查询:
SELECT * FROM AuthorsNew WHERE
CONVERT(VARCHAR(10), lastUpdatedBy,
111) >= DATEADD(day,-2, GETDATE());
输出:
同样的 DATEADD()函数也有助于获取过去一个月的数据。
语法:
SELECT column_name, ... FROM table_name
WHERE date_column >= DATEADD
(MONTH,-<n months>, GETDATE())
也就是说,我们需要把 MONTH 放进去,得到过去 6 个月的数据,而不是“天”。
要获取 SQL Server 中的最后一条更新记录:我们可以编写触发器(它会自动触发),即每当某行发生更改(更新)时,“lastupdatedby”列值应该会根据当前时间戳进行更新。
--Trigger that fires automatically
whenever a update is done in a row
CREATE TRIGGER trigger_change_lastupdatedby
ON dbo.AuthorsNew
AFTER UPDATE
AS
UPDATE dbo.AuthorsNew
SET lastUpdatedBy = CURRENT_TIMESTAMP
WHERE id IN (SELECT DISTINCT id FROM INSERTED);
输出:
现在对 ID = 3 执行更新
查询:
UPDATE AuthorsNew SET AuthorName =
'Monica Ross Geller' WHERE ID = 3;
--We can see that 'lastupdatedby'
column also got changed because
of the trigger availability.
输出:
同样,通过这种方式,我们可以修改记录,并且在任何时间点,我们都可以通过应用上述查询集来获得最新的记录。
示例 4:使用 IDENT_CURRENT()
IDENT_CURRENT()函数接受表名(AuthorsNew),并返回为 AuthorsNew 表生成的最后一个标识值。通过使用这个工具,我们可以找到最后插入的记录。
查询:
SELECT * FROM dbo.AuthorsNew WHERE [id] =
(SELECT IDENT_CURRENT('dbo.AuthorsNew'));
输出:
在上面的示例中,我们已经看到了如何获取截至今天、上周、上个月的最新记录,以及示例表的最新插入/更新记录。
版权属于:月萌API www.moonapi.com,转载请注明出处