在日常的项目开发当中,经常会遇到获取同一属性相同的记录,如何获取记录时间最新的那一条,比如获取某个淘宝用户最新一次的购物记录,美团外卖获取用户最后一次的点外卖记录等等场景,下面通过简单的示例给大家提供三种比较常见的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数据库获取重复记录中日期最新的记录相关推荐

  1. Sqlserver 如何获取每组中的第一条记录

    在日常生活方面,我们经常需要记录一些操作,类似于日志的操作,最后的记录才是有效数据,而且可能它们属于不同的方面.功能下面,从数据库的术语来说,就是查找出每组中的一条数据. 例子 我们要从上面获得的有效 ...

  2. 服务器文件被篡改evopro后缀,SQLServer数据库服务器mdf文件中了勒索病毒,扩展名被篡改为.fuk25933...

    SQLServer数据库服务器mdf文件中了勒索病毒,扩展名被篡改为.fuk25933 常见的扩展名如下: ReadInstructions Devos fuk25933 eking 从以下几点着手, ...

  3. MySQL去重保留最大的那条记录(取最新的记录)

    以用户登录日志表为例,取用户最近登录的设备 1 SET NAMES utf8mb4;2 SET FOREIGN_KEY_CHECKS = 0;3 4 -- ---------------------- ...

  4. sqlserver数据库类型对应Java中的数据类型

    2019独角兽企业重金招聘Python工程师标准>>> SQL Server 类型 JDBC 类型 (java.sql.Types) Java 语言类型 bigint BIGINT ...

  5. mysql 更新多条id键值相同记录中的最新(最后一条)记录

    例如上表(memorystorage表): 每次退柜操作时,要把退柜时间return_time更新(0000-00-00 00:00:00 -> $nowtime) update memorys ...

  6. oracle分组查询取第一条数据,160804、oracle查询:取出每组中的第一条记录

    oracle查询:取出每组中的第一条记录 按type字段分组,code排序,取出每组中的第一条记录 方法一: select type,min(code) from group_info group b ...

  7. Python学习:获取文件夹中最新的文件/文件夹

    文章概述 获取最新修改文件 关于lambda的用法 os.path.getmtime用法 获取最新修改文件 获取文件夹中,最新修改过的文件或者文件夹 import os # 文件夹目录 path=&q ...

  8. php.krab病毒,SQLServer数据库中了勒索病毒加密,扩展名改为Globeimposter-Alpha666qqz

    SQLServer数据库服务器mdf文件中了勒索病毒,扩展名被篡改为.Globeimposter-Alpha666qqz 常见的扩展名如下: .Globeimposter-Alpha666qqz .G ...

  9. MYSQL数据库备份还原,并还原到最新状态(mysqldump,xtrabackup)

    启用二进制日志文件 vim /etc/my.cnf 配置文件位置及文件名根据实际情况确定 sql_log_bin=ON|OFF:是否记录二进制日志,默认为ON //在需要的时候设置为OFF log_b ...

最新文章

  1. ue4商城资源 Nature Cave Cliff 自然洞崖景观场景
  2. 关于 typedef typedef struct typedef union理解 --写给不长脑子的我
  3. pythonsuper多重继承_小白都能理解的Python多继承
  4. 【云计算】云计算从业者导学
  5. 自制一个 简易jQuery 的 API
  6. 数据库原理归档——对于数据库原理最全的总结
  7. kindeditor在线html编辑器,kindeditor在线HTML编辑器
  8. 如何打造自己强大的气场?
  9. 递归处理vue菜单数据
  10. cf烟雾头怎么调win7系统
  11. 2021-2027全球与中国数控龙门镗铣床市场现状及未来发展趋势
  12. 程序员笔试之吉比特雷霆游戏2021届技术类单选题收集整理(十一)
  13. 全基因组选择中准确性的影响因素
  14. 5.系统设计的工作内容与技能工具有哪些?
  15. 最新青龙拉库命令及监控变量教学
  16. 虚拟DOM 之 Snabbdom 一、基本介绍
  17. 风口中的智慧城市:智慧的面子,数字的里子
  18. 2021上半年微信视频号直播的简单总结
  19. CI 框架邮件发送功能,以163为例
  20. 康耐视视觉库编程参考(1)Cognex.VisionPro.ToolGroup Namespace

热门文章

  1. 工业机械人运动学正逆解,简单粗暴!!!!!!
  2. 修改UBOOT和LINUX调试串口(TI达芬奇芯片--DM6467)
  3. 联合体(union)和结构体(struct)的区别
  4. PrimeTime指南——概述和基本流程
  5. 如何判断一条曲线是否自己相交?
  6. 【深度学习】——物体检测细节处理(NMS、样本不均衡、遮挡物体)
  7. 双极型adc与stm32_关于STM32 双ADC同步规则转换两路数据的问题?
  8. C++11系列学习之四----auto
  9. httpf发送 json_Java用HttpClient3发送http/https协议get/post请求,发送map,json,xml,txt数据...
  10. java中ssm付款代码,ssm实现支付宝支付功能(图文详解)