数据库表分组后按时间排序,取每个分组中最近的一条记录。在网上找了好几个,都不行,最终找到了解决办法,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