SQLServer数据库获取重复记录中日期最新的记录

❤️作者主页:IT技术分享社区

❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。

❤️个人荣誉: 数据库领域优质创作者🏆,华为云享专家🏆,阿里云专家博主🏆 

❤️个人博客:IT技术分享社区

❤️公众号/小程序:IT技术分享社区 (运营五年)

❤️好文章点赞 👍 收藏 ⭐再看,养成习惯

在日常的项目开发当中,经常会遇到获取同一属性相同的记录,如何获取记录时间最新的那一条,比如获取某个淘宝用户最新一次的购物记录,美团外卖获取用户最后一次的点外卖记录等等场景,下面通过简单的示例给大家提供三种比较常见的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]GOSET IDENTITY_INSERT [dbo].[t_expense_record_info] ONINSERT [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] OFFEXEC 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'GOEXEC 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'GOEXEC 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'GOEXEC 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'GOEXEC 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'GOEXEC 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'GOEXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'消费记录表' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N't_expense_record_info'GOSELECT * FROM t_expense_record_info ORDER BY user_id;

执行SQL查询结果如下图:

方法1:

SELECT a.*  FROM t_expense_record_info aLEFT JOIN t_expense_record_info b ON a.user_id = b.user_id AND a.expense_time < b.expense_timeWHERE b.id IS NULL ORDER BY a.user_id;

方法2:

select * from t_expense_record_info awhere 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;

最终执行结果如图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271888.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

循环的时候去删除集合中的元素 java.util.ConcurrentModificationException

使用for循环&#xff0c;删除集合中的元素&#xff0c;会报错 java.util.ConcurrentModificationException 只能通过迭代器 iterator删除 1&#xff1a;在while循环中使用iterator迭代器删除集合中元素 2:在for循环中使用iterator迭代器删除集合中元素 3&#xff1a;使用for循…

计算机网络硬件设备组成笔记

网络是计算机或类似计算机的网络设备的集合&#xff0c;它们之间通过各种传输介质进行连接。无论设备之间如何连接&#xff0c;网络都是将来自于其中一台网络设备上的数据&#xff0c;通过传输介质传输到另外一台网络设备上。 本节将基于这个过程讲解网络的组成。 网卡 网卡也被…

java记事本复制粘贴_Java Swing 如何实现记事本中“编辑”菜单下的 剪切,复制,粘贴,删除,全选 功能...

这篇文字将要学习以下知识点&#xff1a;1.如何给JButton按钮添加鼠标点击事件监听器#1.addMouseListener(MouseListener l) 给JButton添加一个鼠标点击监听器l2.文本区控件JTextArea 中的方法(剪切&#xff0c;复制&#xff0c;粘贴&#xff0c;删除&#xff0c;全选 功能的…

迭代器(Iterator)遍历的两种方法(for和while)

一般遍历list的时候&#xff0c;我们习惯下面的写法,但这种写法有缺陷&#xff0c;不能及时释放iterator的内存 while循环遍历 Test public void testIteratorWhile(){ArrayList<String> lists new ArrayList<>();lists.add("A");lists.add("B&…

硬件:断路器、接触器、继电器基础知识

在电力系统中&#xff0c;断路器、接触器、继电器似乎都是耳熟能详的家伙&#xff0c;但很多一知半解的&#xff0c;却也搞不清这些东西究竟有什么不同&#xff0c;又有什么联系&#xff0c;今天我们就一起讲一讲。 首先说相同的吧&#xff01; 当然&#xff0c;无可非议的&…

Collection和Collections区别

1.Collection: 是集合类的上层接口。本身是一个Interface&#xff0c;里面包含了一些集合的基本操作。 Collection接口是Set接口和List接口的父接口 Collection接口的方法 2.Collections Collections是一个集合框架的帮助类&#xff0c;里面包含一些对集合的排序&#xff0c;…

程序员效率:整理常用的在线笔记软件

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

怎么确保一个集合不能被修改?

我们很容易想到用final关键字进行修饰&#xff0c;我们都知道final关键字可以修饰类&#xff0c;方法&#xff0c;成员变量&#xff0c;final修饰的类不能被继承&#xff0c;final修饰的方法不能被重写&#xff0c;final修饰的成员变量必须初始化值&#xff0c;如果这个成员变量…

程序员如何与人打交道

作为程序员&#xff0c;人际关系也是必备的技能之一&#xff0c;本篇文章给大家介绍一下作为程序员处理人际关系需要注意的因素。1、每个人都希望自己被重视当你和他人沟通交流的时候&#xff0c;每个人都希望自己被重视&#xff0c;因为每个人都有自己的想法和观点&#xff0c…

BZOJ_1798__Codevs_2216_[AHOI_2009]_行星序列_(线段树)

描述 BZOJ: http://www.lydsy.com/JudgeOnline/problem.php?id1798 Codevs: http://codevs.cn/problem/2216/ 给出n和行星的质量,进行m次操作: 1.将[l,r]区间内所有行星质量*c. 2.将[l,r]区间内所有行星质量c. 3.询问[l,r]区间内行星质量和. 分析 双标记线段树,多加一个乘法的…

Java中三种Set的实现类的用法和区别

Java为开发者提供了大量的工具类&#xff0c;这给开发人员带来了很大方便&#xff0c;但是选择多了也有困扰&#xff0c;究竟用哪个类&#xff1b;我想选择什么&#xff0c;一是看自己具体需求&#xff0c;二是类本身的性能和用法&#xff1b;Java中提供了HashSet、TreeSet、Li…

程序员的职业选择:打工者、独立开发者、创业者

当你励志成为一名程序员的时候&#xff0c;你是否有对自己的职业生涯进行规划&#xff0c;作为一名开发人员你的理想是什么&#xff0c;希望成为一名什么样的开发者&#xff0c;这些都是不可逃避的问题&#xff0c;本篇文章给大家简单介绍一下程序员的职业选择&#xff1a;打工…

程序员公司选择:创业公司、中等规模公司、大公司

作为一名开发人员&#xff0c;选择不同类型的开发公司你的工作体验可能会完全不同&#xff0c;不同的公司文化也会深刻的影响着你的工作幸福感、存在感、归属感。本篇文章主要给大家分享一下不同类型的公司有什么特点&#xff0c;应该如何进行选择&#xff0c;希望对大家能带来…

Cannot access repo1 (http://repo1.maven.org/maven2) in offline mode and the

我在maven打包的时候出现问题&#xff0c;报错如下&#xff1a; 解决方法&#xff1a; 方法一&#xff1a;如果你出现了如上错误,是因为你的离线模式而导致的依赖的jar包或者需要的插件不能够联网下载 箭头处按钮不能点&#xff0c;点击后表示离线模式 方法二&#xff1a;idea…

作为程序员如何成为专业人士?

1、什么是专业人士&#xff1f;专业人士通常会严肃对待自己的责任和事业&#xff0c;并且愿意作出艰难的选择&#xff0c;然后去做自己认为是正确的事情&#xff0c;当然往往还要自己承担对应的代价。2、专业人士的特点1、恪尽职守、精益求精、不会曲意逢迎。专业人士会让你知道…

linux安装mysql8依赖的环境_CentOS Linux release 8 安装mysql8.

删除用户userdel username删除用户组groupdel groupname查看操作系统信息cat /proc/version操作系统版本信息:Linux version 4.18.0-80.11.2.el8_0.x86_64 (mockbuildkbuilder.bsys.centos.org) (gcc version 8.2.1 20180905 (Red Hat 8.2.1-3) (GCC)) #1 SMP Tue Sep 24 11:32…

jsonp 跨域原理详解

JavaScript是一种在Web开发中经常使用的前端动态脚本技术。在JavaScript中&#xff0c;有一个很重要的安全性限制&#xff0c;被称为“Same-Origin Policy”&#xff08;同源策略&#xff09;。这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制&#xff0c;即Jav…

程序员远程办公需要面临哪些挑战?

当今&#xff0c;越来越多的软件开发团队允许他们的开发人员在家里远程工作。甚至有些团队完全是虚拟团队&#xff0c;他们没有真正的办公环境。另外如果你是一名自由软件工作者&#xff0c;也是属于远程办公的一种形式的体现。大家可能认为远程工作是那么美好和令人向往。你也…

启动项目出现com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException异常解决方法

启动SpringBoot项目失败mysql连接错误 2020-03-21 20:16:25.193 INFO 8204 --- [ main] com.cnadmart.ApiApplication : Starting ApiApplication on DESKTOP-NFT332E with PID 8204 (D:\gunangpinhui\gphProject\cnadmart-api1.1\target\classes sta…

程序员如何高效的学习?

作为一名程序员&#xff0c;技术的日新月异的发展、行业竞争也是愈演愈烈。你如果想让自己立于不败之地。自学是必不可少的。如何能够高效的自学呢&#xff1f;本篇文章给大家简单梳理一下对应的方法流程&#xff0c;希望能对大家能有一些帮助。1、要有全局观&#xff0c;做到心…