sql查询语句请教

Tiny~ 2020-11-20 04:09:29
表记录如何在SQL查询语句,如何只选择客户的最后一条记录呢?

比如:

客户 金额 日期
张三 500 2020-11-11
李四 850 2020-11-08
张三 1180 2020-11-01
李四 580 2020-10-31

……

查询的结果只显示每个客户的最后一条更新日期的记录?比如只显示张三 2020-11-11 金额500这个记录?李四只显示2020-11-08 金额850的记录?
...全文
3794 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2020-11-20
  • 打赏
  • 举报
回复
这块总体叫开窗函数 sqllite在3.25版本以后就已经支持 官方说明: https://www.sqlite.org/windowfunctions.html
Tiny~ 2020-11-20
  • 打赏
  • 举报
回复
可以了,已解决,方法在这里: https://blog.csdn.net/bushizhuanjia/article/details/6854208
samsone 2020-11-20
  • 打赏
  • 举报
回复

SELECT * FROM 表 a
INNER JOIN (
SELECT 客户,max(日期) 日期  FROM 表 GROUP BY 客户  )b  
ON a.日期=b.日期
Tiny~ 2020-11-20
  • 打赏
  • 举报
回复
引用 1 楼 samsone 的回复:
SELECT 客户,金额, max(日期) FROM 表 GROUP BY 客户 ,金额
这个还是把所有记录查询出来了,如何只保留每一个客户更新日期最新的那条记录呢?
Tiny~ 2020-11-20
  • 打赏
  • 举报
回复
忘记说了,是sqlite
引用 4 楼 Mr.Huang…… 的回复:


create table #t
(
	客户 varchar(10),
	金额 money,
	日期 datetime
)

insert into #t
select '张三',500,'2020-11-11' union all
select '李四',850,'2020-11-08' union all
select '张三',1180,'2020-11-01' union all
select '李四',580,'2020-10-31'

select * from #t

SELECT 客户,金额,日期 FROM 
(SELECT 客户,金额,日期,ROW_NUMBER()OVER(PARTITION BY 客户 ORDER BY 日期 DESC) AS XH from #t) tt WHERE XH=1
Mr.Huang…… 2020-11-20
  • 打赏
  • 举报
回复


create table #t
(
	客户 varchar(10),
	金额 money,
	日期 datetime
)

insert into #t
select '张三',500,'2020-11-11' union all
select '李四',850,'2020-11-08' union all
select '张三',1180,'2020-11-01' union all
select '李四',580,'2020-10-31'

select * from #t

SELECT 客户,金额,日期 FROM 
(SELECT 客户,金额,日期,ROW_NUMBER()OVER(PARTITION BY 客户 ORDER BY 日期 DESC) AS XH from #t) tt WHERE XH=1
datafansbj 2020-11-20
  • 打赏
  • 举报
回复
按 SQLServer 语法如下,其他数据库类似:
Select a.* From 表 as a
Inner join (Select 客户, Max(日期) as 最大日期 From 表 GroupBy 客户) as b
on a.客户 = b.客户 and a.日期 = b.最大日期

注意:如果客户、日期有重复记录,结果可能有多条(m * n 条),所以最好用唯一主键字段做关联。

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧