在日常的项目开发当中,经常会遇到获取同一属性相同的记录,如何获取记录时间最新的那一条,比如获取某个淘宝用户最新一次的购物记录,美团外卖获取用户最后一次的点外卖记录等等场景,下面通过简单的示例给大家提供三种比较常见的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. k8s多master建议用几个_Kubernetes 教程之跟着官方文档从零搭建 K8S
  2. Ceph分布式存储实战1.4 Ceph快速安装
  3. Linux从零开始(二、基础命令)
  4. QQ浏览器怎么关闭云加速 QQ浏览器云加速关闭方法
  5. python外星人入侵游戏
  6. postgresql中sql查询语句报错处理——ERROR: failed to find conversion function from unknown to text
  7. 一Flash从入门开发者放弃了成长之路
  8. 跳跃游戏 (动态规划剪枝/前缀和/滑动窗口/BFS剪枝)
  9. 计算机打印机设备管理器在哪里,打印机驱动在电脑哪里
  10. mcnpf5输出结果_MCNP学习笔记-计数卡F6
  11. Graphql入门_0
  12. h5设计师 赚钱_作为设计师赚钱的10种方法
  13. 真正说透Redis五种数据结构
  14. STM32F7 IAP在线刷写简述 (STM32CUBE+freeRTOS)
  15. 三层交换与路由器之间连接配置
  16. 通达信交易接口代码的执行过程分享
  17. RTK差分共享猫APP后台系统已开源
  18. Android金山屏幕取词,金山词霸屏幕取词方法分析
  19. 带你认识Javascript、ES5和ES6的介绍和区别
  20. 乐灵机器人_都说STEAM教育好,你真的了解什么是STEAM教育吗?

热门文章

  1. [转]权限树中Checkbox的操作[Asp.Net2.0]
  2. [转]Xvid参数详解
  3. 学习笔记(10):Python网络编程并发编程-粘包现象
  4. 双缓冲 android,Android 的 SurfaceView 双缓冲应用
  5. mysql装完后navicat无法连接_重装mysql后导致Navicat连接失败
  6. C语言求十个数中最大值
  7. jfinal java类型和数据库类型_java下JFinal getModel方法及数据库使用出现问题解决教程...
  8. springboot打war包汇总
  9. (56)zabbix Screens视图配置
  10. python进程和线程