SQLServer数据库获取重复记录中日期最新的记录
在日常的项目开发当中,经常会遇到获取同一属性相同的记录,如何获取记录时间最新的那一条,比如获取某个淘宝用户最新一次的购物记录,美团外卖获取用户最后一次的点外卖记录等等场景,下面通过简单的示例给大家提供三种比较常见的SQL写法,希望能给大家带来一些思路。
1、建表脚本:记录的是当前用户的订单记录。如果某个人多次下单会出现某个人重复下订单的记录。脚本如下:
CREATE TABLE [dbo].[t_expense_record_info](
[id] [int] IDENTITY(1,1) NOT NULL,
[goods_id] [int] NULL,
[amount] [decimal](18, 6) NULL,
[expense_time] [datetime] NULL,
[user_id] [int] NULL,
[create_date] [datetime] NULL,
CONSTRAINT [PK_t_expense_record_info] 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]
GO
SET IDENTITY_INSERT [dbo].[t_expense_record_info] ON
INSERT [dbo].[t_expense_record_info] ([id], [goods_id], [amount], [expense_time], [user_id], [create_date]) VALUES (1, 100, CAST(5000.000000 AS Decimal(18, 6)), CAST(0x0000A9D900CDFE60 AS DateTime), 1, CAST(0x0000AB4700000000 AS DateTime))
INSERT [dbo].[t_expense_record_info] ([id], [goods_id], [amount], [expense_time], [user_id], [create_date]) VALUES (2, 100, CAST(2000.000000 AS Decimal(18, 6)), CAST(0x0000AB460130DEE0 AS DateTime), 2, CAST(0x0000AB4700000000 AS DateTime))
INSERT [dbo].[t_expense_record_info] ([id], [goods_id], [amount], [expense_time], [user_id], [create_date]) VALUES (3, 118, CAST(300.000000 AS Decimal(18, 6)), CAST(0x0000AB430130DEE0 AS DateTime), 1, CAST(0x0000AB4700000000 AS DateTime))
INSERT [dbo].[t_expense_record_info] ([id], [goods_id], [amount], [expense_time], [user_id], [create_date]) VALUES (4, 20, CAST(1500.000000 AS Decimal(18, 6)), CAST(0x0000AB480130DEE0 AS DateTime), 2, CAST(0x0000AB4700000000 AS DateTime))
INSERT [dbo].[t_expense_record_info] ([id], [goods_id], [amount], [expense_time], [user_id], [create_date]) VALUES (5, 300, CAST(100.000000 AS Decimal(18, 6)), CAST(0x0000AA860130DEE0 AS DateTime), 3, CAST(0x0000AB4700000000 AS DateTime))
INSERT [dbo].[t_expense_record_info] ([id], [goods_id], [amount], [expense_time], [user_id], [create_date]) VALUES (6, 80, CAST(7000.000000 AS Decimal(18, 6)), CAST(0x0000AAD5013BDB60 AS DateTime), 1, CAST(0x0000AB4700000000 AS DateTime))
SET IDENTITY_INSERT [dbo].[t_expense_record_info] OFF
EXEC sys.sp_addextendedproperty @name=N'MS_Description',
@value=N'主键' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N't_expense_record_info', @level2type=N'COLUMN',@level2name=N'id'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description',
@value=N'商品id' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N't_expense_record_info', @level2type=N'COLUMN',@level2name=N'goods_id'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description',
@value=N'消费金额' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N't_expense_record_info', @level2type=N'COLUMN',@level2name=N'amount'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description',
@value=N'消费时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N't_expense_record_info', @level2type=N'COLUMN',@level2name=N'expense_time'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description',
@value=N'消费者id' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N't_expense_record_info', @level2type=N'COLUMN',@level2name=N'user_id'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description',
@value=N'创建时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N't_expense_record_info', @level2type=N'COLUMN',@level2name=N'create_date'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description',
@value=N'消费记录表' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N't_expense_record_info'
GO
SELECT * FROM t_expense_record_info ORDER BY user_id;
执行SQL查询结果如下图:
方法1:
SELECT a.* FROM t_expense_record_info a
LEFT JOIN t_expense_record_info b ON a.user_id = b.user_id AND a.expense_time < b.expense_time
WHERE b.id IS NULL ORDER BY a.user_id;
方法2:
select * from t_expense_record_info a
where a.expense_time in
(select max(b.expense_time) from t_expense_record_info b where b.user_id=a.user_id)
ORDER BY a.user_id;
方法3:
select * from t_expense_record_info a where not exists
(select 1 from t_expense_record_info b where b.user_id=a.user_id and b.expense_time>a.expense_time)
ORDER BY a.user_id;
最终执行结果如图:
SQLServer数据库获取重复记录中日期最新的记录相关推荐
- Sqlserver 如何获取每组中的第一条记录
在日常生活方面,我们经常需要记录一些操作,类似于日志的操作,最后的记录才是有效数据,而且可能它们属于不同的方面.功能下面,从数据库的术语来说,就是查找出每组中的一条数据. 例子 我们要从上面获得的有效 ...
- 服务器文件被篡改evopro后缀,SQLServer数据库服务器mdf文件中了勒索病毒,扩展名被篡改为.fuk25933...
SQLServer数据库服务器mdf文件中了勒索病毒,扩展名被篡改为.fuk25933 常见的扩展名如下: ReadInstructions Devos fuk25933 eking 从以下几点着手, ...
- MySQL去重保留最大的那条记录(取最新的记录)
以用户登录日志表为例,取用户最近登录的设备 1 SET NAMES utf8mb4;2 SET FOREIGN_KEY_CHECKS = 0;3 4 -- ---------------------- ...
- sqlserver数据库类型对应Java中的数据类型
2019独角兽企业重金招聘Python工程师标准>>> SQL Server 类型 JDBC 类型 (java.sql.Types) Java 语言类型 bigint BIGINT ...
- mysql 更新多条id键值相同记录中的最新(最后一条)记录
例如上表(memorystorage表): 每次退柜操作时,要把退柜时间return_time更新(0000-00-00 00:00:00 -> $nowtime) update memorys ...
- oracle分组查询取第一条数据,160804、oracle查询:取出每组中的第一条记录
oracle查询:取出每组中的第一条记录 按type字段分组,code排序,取出每组中的第一条记录 方法一: select type,min(code) from group_info group b ...
- Python学习:获取文件夹中最新的文件/文件夹
文章概述 获取最新修改文件 关于lambda的用法 os.path.getmtime用法 获取最新修改文件 获取文件夹中,最新修改过的文件或者文件夹 import os # 文件夹目录 path=&q ...
- php.krab病毒,SQLServer数据库中了勒索病毒加密,扩展名改为Globeimposter-Alpha666qqz
SQLServer数据库服务器mdf文件中了勒索病毒,扩展名被篡改为.Globeimposter-Alpha666qqz 常见的扩展名如下: .Globeimposter-Alpha666qqz .G ...
- MYSQL数据库备份还原,并还原到最新状态(mysqldump,xtrabackup)
启用二进制日志文件 vim /etc/my.cnf 配置文件位置及文件名根据实际情况确定 sql_log_bin=ON|OFF:是否记录二进制日志,默认为ON //在需要的时候设置为OFF log_b ...
最新文章
- ue4商城资源 Nature Cave Cliff 自然洞崖景观场景
- 关于 typedef typedef struct typedef union理解 --写给不长脑子的我
- pythonsuper多重继承_小白都能理解的Python多继承
- 【云计算】云计算从业者导学
- 自制一个 简易jQuery 的 API
- 数据库原理归档——对于数据库原理最全的总结
- kindeditor在线html编辑器,kindeditor在线HTML编辑器
- 如何打造自己强大的气场?
- 递归处理vue菜单数据
- cf烟雾头怎么调win7系统
- 2021-2027全球与中国数控龙门镗铣床市场现状及未来发展趋势
- 程序员笔试之吉比特雷霆游戏2021届技术类单选题收集整理(十一)
- 全基因组选择中准确性的影响因素
- 5.系统设计的工作内容与技能工具有哪些?
- 最新青龙拉库命令及监控变量教学
- 虚拟DOM 之 Snabbdom 一、基本介绍
- 风口中的智慧城市:智慧的面子,数字的里子
- 2021上半年微信视频号直播的简单总结
- CI 框架邮件发送功能,以163为例
- 康耐视视觉库编程参考(1)Cognex.VisionPro.ToolGroup Namespace
热门文章
- 工业机械人运动学正逆解,简单粗暴!!!!!!
- 修改UBOOT和LINUX调试串口(TI达芬奇芯片--DM6467)
- 联合体(union)和结构体(struct)的区别
- PrimeTime指南——概述和基本流程
- 如何判断一条曲线是否自己相交?
- 【深度学习】——物体检测细节处理(NMS、样本不均衡、遮挡物体)
- 双极型adc与stm32_关于STM32 双ADC同步规则转换两路数据的问题?
- C++11系列学习之四----auto
- httpf发送 json_Java用HttpClient3发送http/https协议get/post请求,发送map,json,xml,txt数据...
- java中ssm付款代码,ssm实现支付宝支付功能(图文详解)