分组查询最晚一条数据(ORACLE)

现有客户表,交费表,需查询每个存在交费记录客户的最后一笔交费信息

这里提供两种方式

注:客户不会在同一时间有两条交费,SQL可直接执行

--查询客户名称,最后一笔交费时间,以及最后一笔交费金额
WITH
--客户表:客户id,客户名称
a AS(
SELECT 'a1' aid, '张三' aname FROM dual
UNION ALL 
SELECT 'a2', '李四' FROM dual
UNION ALL 
SELECT 'a3', '王五' FROM dual
),
--交费表:交费ID,客户ID,交费时间(以数字代替,数字越大时间越晚),交费金额
b AS(
SELECT 'b1' bid,'a1' aid, '1' btime, 10 bnum FROM dual
UNION ALL 
SELECT 'b2','a1', '2',30 FROM dual
UNION ALL 
SELECT 'b3', 'a1', '3',40 FROM dual
UNION ALL 
SELECT 'b4', 'a2', '1',40 FROM dual
UNION ALL 
SELECT 'b5', 'a2', '3',60 FROM dual
UNION ALL 
SELECT 'b6', 'a3', '1',50 FROM dual
)
--方式一:子查询
/*SELECT a.aname,b1.bnum,b1.btime
FROM b b1
JOIN (SELECT b.aid,MAX(b.btime) btimeFROM b GROUP BY b.aid) b2 ON b2.aid = b1.aid AND b2.btime = b1.btime
JOIN a ON b1.aid = a.aid
ORDER BY 1,2,3
*/
--方式二:分析函数
/*SELECT aname,bnum,btime
FROM (
SELECT a.aname,b.bnum,b.btime,
row_number() OVER (partition by b.aid order by b.btime desc) rn
FROM b
JOIN a ON a.aid = b.aid
)
WHERE rn = 1
ORDER BY 1,2,3
--方式三:NOT EXISTS
SELECT a.aname,b.bnum,b.btime 
FROM a
JOIN b ON b.aid = a.aid
AND NOT EXISTS(
SELECT 1 FROM b b1
WHERE b1.aid = b.aid
AND b1.btime > b.btime)
ORDER BY 1,2,3*/
--方式四:开窗函数
SELECT DISTINCT a.aname,
first_value(b.bnum) OVER (partition by b.aid order by b.btime DESC) bnum,
last_value(b.btime) OVER (partition by b.aid) btime
FROM b
JOIN a ON a.aid = b.aid
ORDER BY 1,2,3

查询结果如下

first_value和last_value用法不同可以参照

Oracle分析函数之FIRST_VALUE和LAST_VALUE

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

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

相关文章

ORACLE循环中使用序列

在批量生成数据时,经常会用到序列的Nextval,今天碰到了这样的情况,日常记录,下附解决方案。先看这段脚本 DECLARE i INTEGER; BEGINFOR cur IN 1..5 LOOPi : DomainObjectId.Nextval;dbms_output.put_line(i);END LOOP; END; 编…

常用的机器学习数据挖掘知识点【转】

转自: 【基础】常用的机器学习&数据挖掘知识点 Basis(基础): MSE(Mean Square Error 均方误差),LMS(LeastMean Square 最小均方),LSM(Least Square Methods 最小二乘法),MLE(MaximumLikelihood Estimation最大似然…

tomcat运行问题解决方法

早上过来遇到一个非常奇怪的问题,运行一个新的项目,运行环境都没问题,可是在调试的时候,总是出错。 错误代码: log4j:WARN No appenders could be found for logger log4j:WARN Please initialize the log4j system p…

团队开发——冲刺1.d

冲刺阶段一(第四天) 1、昨天做了什么? 完成部分界面设置,补充三层难度界面、游戏结束界面。 2、今天准备做什么? 优化界面细节。查看C#资料,再解决自己电脑的问题。 3、遇到什么困难? 已经固定好…

10. javacript高级程序设计-DOM

1. DOM DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序接口) 1.1 节点层次 DOM可以将任何HTML和XML文档描绘成一个由多层节点构成的结构。节点分为几种不同的类型,每种类型分别表示文档中不同的信息及标记。 1.1.1 Node类型 DOM1中…

hdu 5045 Contest(状态压缩DP)

题解&#xff1a;我们使用一个二位数组dp[i][j]记录进行到第i个任务时&#xff0c;人组合为j时的最大和&#xff08;这里的j我们用二进制的每位相应一个人&#xff09;。 详细见代码&#xff1a; #include <iostream> #include <cstdio> #include <cstring> …

mysql001创建数据库

-- 注释&#xff0c;ctrl/ -- 查询所有数据库&#xff1b; show DATABASES; -- 创建数据库; CREATE DATABASE studb; -- 切换数据库; USE studb; -- 删除数据库 DROP DATABASE studb;

mysql002创建表

-- 创建student表 DDL CREATE TABLE stdent( sno int(3), name VARCHAR(55), sex CHAR(2), age int, dtdate date, classname VARCHAR(55), email VARCHAR(55) ) -- 查询表中数据 DQL SELECT * FROM stdent;

oc基础-self关键字的使用

#import <Foundation/Foundation.h>interface Student : NSObject {int _age;char *_name; } - (void) study; - (void) run; (void) play;(void) run; endimplementation Student - (void) study {NSLog("%s在学习",self->_name);[self run];//若在此调用…

mysql003操作表DDL

-- 查询表中数据 DQL 注意在mydb数据库下面 SELECT * FROM stdent; -- 在表中添加一列 DDL -- 新增列 默认添加到最后 ALTER TABLE stdent add score DOUBLE(4,1); -- 新增一列 在表中开头添加 ALTER TABLE stdent add score2 double(5,1) first; -- 在指定列后面添…

Google Guava学习笔记——基础工具类Joiner的使用

Guava 中有一些基础的工具类&#xff0c;如下所列&#xff1a; 1&#xff0c;Joiner 类&#xff1a;根据给定的分隔符把字符串连接到一起。MapJoiner 执行相同的操作&#xff0c;但是针对 Map 的 key 和 value。 2&#xff0c;Splitter 类&#xff1a;与 Joiner 操作相反的类&a…

xampp 无法启动mysql

Error: could not open single-table tablespace file .\test\dr.ibd 在网上搜索到的解决方案都不管用。结果整合了两个解决方案&#xff1a; 删掉xampp/data/ib_logfile0 xampp/data/ib_logfile1 xampp/data/ibdata1 三个文件就好了转载于:https://www.cnblogs.com/fyydnz/p/4…

mysql005约束.列级别

-- 列级约束 -- sno 主键&#xff1a;唯一&#xff0c;不为空&#xff0c;自增 -- name 非空 -- sex 非空&#xff0c;默认值&#xff0c;只有男女 -- age 0-30岁 -- score 非空 -- dtdate 非空 -- classname 非空 -- email唯一 -- 创建表&#xff0c;增加列级约束 …

hdu.1430.魔板(bfs + 康托展开)

魔板 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2170 Accepted Submission(s): 455 Problem Description在魔方风靡全球之后不久&#xff0c;Rubik先生发明了它的简化版——魔板。魔板由8个同样大小的方…

mysql006添加外键约束

-- 添加外键 -- 建立主表&#xff0c;班级表 CREATE TABLE class( cno int PRIMARY key auto_increment, cname VARCHAR(55) ) SELECT * FROM class; -- 建立从表&#xff0c;学生表 CREATE table stu( sno int PRIMARY KEY auto_increment, sname VARCHAR(55), sex ch…

Circle-Progress-View

https://github.com/jakob-grabner/Circle-Progress-View 转载于:https://www.cnblogs.com/eustoma/p/4507476.html

python1.学生管理系统

#定义函数界面 def info_print(): print("请选择功能-----------") print("1.添加学员") print("2.删除学员") print("3.修改学员") print("4.查询学员") print("5.显示所有学员") print("6.退出系统"…

初学JSP+Servlet常见的错误

web编程中常见的错误: 一、404(要访问的资源没有找到) 1.web程序有没有部署(将项目到tomcat中) 2.url有没有写错(包括大小写&#xff0c;包括项目有没有重命名) 3.有没有将jsp/html放在WEB-INF 4.如果访问的是servlet,那么看下web.xml中url-pattern中的配置和你写的名字是否一致…

python2.面向对象学生管理系统

main.py(程序主入口) #1.导入管理系统模块 from mangerSystem import * #2.启动管理系统 #保证是当前文件运行才启动管理系统&#xff1a;if -- 创建对象并调用run()方法 if __name__"__main__": student_managerStudentManager() student_manager.run() student…

elasticsearch 删除满足条件的语句_ELK从入门到还未精通(二)——ElasticSearch上篇

大家好&#xff0c;我是泥腿子安尼特&#xff0c;5个月没在李佬都公众号更新文章了。上一篇&#xff0c;大致介绍了作为工具人的我是如何基本使用这一套ELK 系统的。今天就讲讲这个最重要的E——基于Lucene的搜索引擎ElasticSearch(后面简称ES)。最近刚搬家&#xff0c;没想到隔…