您的当前位置:首页数据库表分组后按时间排序,取每个分组中最近的一条记录

数据库表分组后按时间排序,取每个分组中最近的一条记录

2023-11-09 来源:哗拓教育

数据库表分组后按时间排序,取每个分组中最近的一条记录。在网上找了好几个,都不行,最终找到了解决办法,Oracle亲测可以。

 

技术分享

with m as (select id,max(times) c from test_max group by id)select n.id,n.duowei from test_max n join m on m.id=n.id and m.c=n.times

第一次在博客园写知识,愿意和大家分享。

数据库表分组后按时间排序,取每个分组中最近的一条记录

标签:

小编还为您整理了以下内容,可能对您也有帮助:

sql数据库怎么实现分组并取每组的前1条语句,按日期排序?

select * from

(

select row_number() over(partition by '分组' order by '日期') as rownum -- 排序并分组

, * -- 所需显示的字段

from 表

) as T

where T.rownum = 1

对每组的数据按日期排序并加上行号

取出时只取行号为1,也就是第一条数据。

sql查数据库中时间最新的一条记录(查询数据库时间sql)

select*,max(create_time)froma

wherecreate_time<="2017-03-2919:30:36"

groupbyuser_id

这句可以理解为将结果集根据user_id分组,每组取time最大一条记录。这样就很好的实现了批量查询最近记录,并且仅仅需要遍历一次表,即使在数据量巨大的情况下也可以在很短的时间查出结果。

扩展资料:

SQL数据查询语句

1、语句语法简单归纳为:

SELECTselect_list[INTOnew_table_name][FROMtable_source]

[WHEREsearch_condition][GROUPBYgroup_by_expression]

[HAVINGsearch_condition][ORDERBYorder_expression[ASC|DESC]]

2、WITH子句用于指定临时命名的公用表达式,在单条语句(SELECT、INSERT、UPDATE、DELETE)的语句执行范围内定义。

3、LIKE关键字

用于模糊查询,通配符有%、_、[]、[^]

%:后面可以跟零个或多个字符

_:匹配任意单个字符

[]:查询一定范围内的单个字符,包括两端数据

[^]:表示不在一定范围内的单个字符,包括两端数据

oracle SQL 取出每个分组的按照日期最新一条记录,同时还显示每个分组某个字段的总和

--用外链接把AA表和CC表链接起来查询就可以了

SELECT AA.CODE, AA.NUM, AA.PRICE, CC.DATETIME, CC.SUMNUM

  FROM test AA

  --下面的BB表查询的是根据code分组查询num求和及最大datetime,之后作为一个表CC

  LEFT JOIN (SELECT BB.CODE, SUM(NUM) SUMNUM,MAX(BB.DATETIME) DATETIME

               FROM test BB

              GROUP BY BB.CODE) CC

    ON AA.CODE = CC.CODE

 WHERE AA.DATETIME = CC.DATETIME

 --其中DATETIME字段就是你表中的date字段

大神们 帮帮我啊..mysql 分组后取每组最新一条数据

关联查询可以解决你的问题,用到group by分组、limit 1即可

每个类型下最新的商品

每个类型,就是每个商品种类

假设商品表表名为A,种类表为B假设商品种类表的主键为type_id 

group by B.type_id

关联查询:两张表肯定有关系,没猜错的话就是商品的种类id

sql语句为:

select

A.* from

A left join B on a.proct_type_id = B.type_id

group by B.type_id

order by A.id desc limit 1

自己组织一下,不难的

大神们 帮帮我啊..mysql 分组后取每组最新一条数据

关联查询可以解决你的问题,用到group by分组、limit 1即可

每个类型下最新的商品

每个类型,就是每个商品种类

假设商品表表名为A,种类表为B假设商品种类表的主键为type_id 

group by B.type_id

关联查询:两张表肯定有关系,没猜错的话就是商品的种类id

sql语句为:

select

A.* from

A left join B on a.proct_type_id = B.type_id

group by B.type_id

order by A.id desc limit 1

自己组织一下,不难的

怎样在数据库的一个表里筛选出每一人的时间最新的一条

用group by可以实现:
select yhh,MAX(gdtime) from table1 group by yhh

怎样在数据库的一个表里筛选出每一人的时间最新的一条

用group by可以实现:
select yhh,MAX(gdtime) from table1 group by yhh

mysql分组排序,取每组第一条数据

MySQL:5.7

SQL语句的写法:

思路:先进行排序,然后再进行分组,获取每组的第一条。

derived_merge指的是一种查询优化技术,作用就是把派生表合并到外部的查询中,提高数据检索的效率。这个特性在MySQL5.7版本中被引入,可以通过如下SQL语句进行查看/开启/关闭等操作。

上面虽然听起来感觉很牛的样子,但是实际情况是,这个新特性,不怎么受欢迎,容易引起错误。

假设我们现在把sql中的 distinct(a.id) tid ,去掉,会发现子查询(或者叫:临时表)中的order by a.id desc失效了。

为什么会这样呢?

原理分析:

我们这里使用了临时表排序,继而对其结果进行分组,结果显示失败,加了distinct(a.id) tid,后结果正确,原因是因为临时表(派生表derived table)中使用order by且使其生效,必须满足三个条件:

一旦外部表使用了group by, 那么临时表(派生表 derived table)将不会执行filesort操作(即 order by 会被忽略 )。之后我使用了limit可以使其生效,原因是因为要使派生表order by生效, 派生表可以通过使用group by、limit、having、distinct等等使其生效 (方法有好多,详情可看文档 https://dev.mysql.com/doc/refman/5.7/en/derived-table-optimization.html )

原文链接:

https://blog.csdn.net/u013066244/article/details/116461584

SQL在分组查询时,怎么获取最新一条记录

sql如何分组选择显示最新的一条数据

首先,该问题对应的SQL如下

select 采购类别,客户,订货总额

from (select 采购类别,客户,订货总额,

row_number() over(partition by 采购类别 order by 订货总额 desc) rn

from table_name) awhere rn<=2

;

其次,常用数据库比如Oracle和Sqlserver都有特定函数完成分组排序的功能,如果需要显示并列的情况可以用下面另外的2个.

分别有3个类似函数:

row_number() over

这个函数不需要考虑是否并列,哪怕根据条件查询出来的数值相同也会进行连续排名。也是最常用的函数,排序结果类似于1,2,3,4,5

rank() over

查出指定条件后进行一个排名,但是有一个特点。假如是对学生排名,那么实用这个函数,成绩相同的两名是并列。排序结果类似于1,2,2,4,5

dense_rank() over

比较特殊,排序结果类似于1,2,2,3,4

显示全文