Sql_从查询的结果集中分组后取最后有效的数据成新的结果集小记(待优化)
Dim sql As String = " SELECT xp.*, "
sql = sql + " xf_owner.ownername, "
sql = sql + " xf_receiver.receivename, "
sql = sql + " lastprice = "
sql = sql + " ( "
sql = sql + " SELECT TOP 1 "
sql = sql + " lp.tonprice "
sql = sql + " FROM "
sql = sql + " ( "
sql = sql + " SELECT * "
sql = sql + " FROM xf_price "
sql = sql + " WHERE pk_price IN ( "
sql = sql + " SELECT TOP 2 "
sql = sql + " pk_price "
sql = sql + " FROM xf_price "
sql = sql + " WHERE pk_pricegroup = xp.pk_pricegroup "
sql = sql + " AND pk_owner = xp.pk_owner "
sql = sql + " AND pk_receiver = xp.pk_receiver "
sql = sql + " ORDER BY enabletime DESC "
sql = sql + " ) "
sql = sql + " ) lp "
sql = sql + " ORDER BY lp.enabletime ASC "
sql = sql + " ), "
sql = sql + " transname = CASE "
sql = sql + " WHEN transtype = 0 THEN "
sql = sql + " '外部运输' "
sql = sql + " WHEN transtype = 1 THEN "
sql = sql + " '厂内转运' "
sql = sql + " ELSE "
sql = sql + " '厂外转运' "
sql = sql + " END "
sql = sql + " FROM xf_price xp "
sql = sql + " LEFT JOIN xf_owner "
sql = sql + " ON xf_owner.pk_owner = xp.pk_owner "
sql = sql + " LEFT JOIN xf_receiver "
sql = sql + " ON xf_receiver.pk_receiver = xp.pk_receiver "
sql = sql + " WHERE xp.dr = 0 "
sql = sql + " AND xp.pk_pricegroup = @pk_pricegroup "
sql = sql + " AND pk_price IN ( "
sql = sql + " SELECT TOP 1 "
sql = sql + " pk_price "
sql = sql + " FROM xf_price "
sql = sql + " WHERE pk_pricegroup = xp.pk_pricegroup "
sql = sql + " AND pk_owner = xp.pk_owner "
sql = sql + " AND pk_receiver = xp.pk_receiver "
sql = sql + " ORDER BY enabletime DESC "
sql = sql + " ) "
sql = sql + " ORDER BY xp.enabletime DESC; "
Dim com As New SqlClient.SqlCommand(sql, strCon)
com.Parameters.Add(New SqlClient.SqlParameter("@pk_pricegroup", pk_pricegroup))
Dim ds As New DataSet
Dim adapter As New SqlClient.SqlDataAdapter(com)
strCon.Open()
adapter.Fill(ds, "xf_price")
strCon.Close() 主要思路:先取整体结果集,然后条件取按时间倒序排第一条记录的主键,然后有个字段需要取上一次修改的结果值(别名lastprice,即上次修改的值tonprice),则采用先TOP 2 取两条数据,然后按时间倒序排,再TOP 1取第一条便是上一次修改的结果值。
注意xf_price xp 的妙用,可以解决当主键条件取第一条时只显示一条返回记录的问题。
Sql_从查询的结果集中分组后取最后有效的数据成新的结果集小记(待优化)的更多相关文章
- MSSQL—按照某一列分组后取前N条记录
以前在开发的时候遇到过一个需求,就是要按照某一列进行分组后取前几条数据,今天又有同事碰到了,帮解决了之后顺便写一篇博客记录一下. 首先先建一个基础数据表,代码如下: IF OBJECT_ID(N'Te ...
- MSSQL 分组后取每组第一条(group by order by)
查询中经常遇到这种查询,分组后取每组第一条.分享下一个SQL语句: --根据 x 分组后.根据 y 排序后取第一条 select * from ( select ROW_NUMBER() over(p ...
- SQL Server 分组后取Top N
SQL Server 分组后取Top N(转) 近日,工作中突遇一需求:将一数据表分组,而后取出每组内按一定规则排列的前N条数据.乍想来,这本是寻常查询,无甚难处.可提笔写来,终究是困住了笔者好一会儿 ...
- 记一次有意思的 SQL 实现 → 分组后取每组的第一条记录
开心一刻 今天,朋友气冲冲的走到我面前 朋友:我不是谈了个女朋友,谈了三个月嘛,昨天我偷看她手机,你猜她给我备注什么 我:备注什么? 朋友:舔狗 2 号! 我一听,气就上来了,说道:走,找她去,这婆娘 ...
- SQL获取分组后取某字段最大一条记录(求每个类别中最大的值的列表)
获取分组后取某字段最大一条记录 方法一:(效率最高) select * from test as a where typeindex = (select max(b.typeindex) from t ...
- Oracle分组后取某列最大值的行数据
select * from ( select last_comment, row_number() over(partition by employeeid,roadline,stationname ...
- Sql语句groupBY分组后取最新一条记录的SQL
一.问题 groupBY分组后取最新一条记录的SQL的解决方案. 二.解决方案 select Message,EventTime from PT_ChildSysAlarms as a where E ...
- SQL 分组后取最小行号记录
本示例测试两个表联接查询后,分组并取分组后的最小行号记录 测试表: tb1表结构如下: CREATE TABLE [dbo].[tb1]( ) NOT NULL, ) NULL, ) NULL, CO ...
- SQL数据分组后取最大值或者取前几个值(依照某一列排序)
今日做项目的时候,项目中遇到须要将数据分组后,分组中的最大值,想了想,不知道怎么做.于是网上查了查,最终找到了思路,经过比較这个查询时眼下用时最快的,事实上还有别的方法,可是我认为我们仅仅掌握最快的方 ...
随机推荐
- Windows环境下执行hadoop命令出现Error: JAVA_HOME is incorrectly set Please update D:\SoftWare\hadoop-2.6.0\conf\hadoop-env.cmd错误的解决办法(图文详解)
不多说,直接上干货! 导读 win下安装hadoop 大家,别小看win下的安装大数据组件和使用 玩过dubbo和disconf的朋友们,都知道,在win下安装zookeeper是经常的事 ...
- Java 集合框架(三)—— LinkedList
三.链表 —— LinkedList ArrayList 虽然好用,但是数组和数组列表都有一个重大的缺陷:从数组的中间位置删除一个元素要付出很大的代价,其原因是数组中处于被删除元素之后的所有元素都要向 ...
- 面试题27:单链表向右旋转k个节点
Given a list, rotate the list to the right by kplaces, where k is non-negative. For example:Given1-& ...
- ASP.NET Core 中的缓存
目录 缓存的基本概念 缓存原理 缓存设计 分布式缓存 Memcache 与 Redis 的比较 缓存穿透,缓存击穿,缓存雪崩解决方案 数据一致性 使用内置 MemoryCache 使用分布式缓存 Re ...
- elasticsearch的join查询
1.概述 官方文档 https://www.elastic.co/guide/en/elasticsearch/reference/current/joining-queries.html 两种类型的 ...
- Week6&7——第一次项目冲刺(Alpha版本)
Deadline: 2017-11-11 10:00PM,以博客发表日期为准. 评分基准: 按时交 - 有分(需求&原型改进与系统设计-10分,敏捷冲刺-70分),检查的项目包括后文的三个方面 ...
- Linux内核源码目录
linux和Android的Makefile和android.mk Uboot流程分析(未编辑完) Kernel的IIC驱动分析(未编辑完)
- ORACLEserver实例DB的概念学习理解与总结【进阶一】
个人原创,转自请在文章开头显眼位置注明出处:https://www.cnblogs.com/sunshine5683/p/10048824.html 一.以后看一个oracleserver,可以使用如 ...
- 设计模式学习——工厂模式(Factory Pattern)
1.有一个工厂,专门生产不同品牌的汽车.当有人需要从此工厂提货的时候,只需要告诉他,要什么品牌的,就可以了,并不关心这些车是怎么生产出来的. 2.以上方式,如果增加品牌的时候,也要修改工厂,有点麻烦. ...
- span与a元素的键盘聚焦性以及键盘点击性研究——张鑫旭
一.众所周知的与不为所知的 我们平时涉及点击交互事件的时候,都是使用的a元素或者button元素,原因是可以相应键盘focus效果以及回车触发点击事件,这是众所周知的. 但是,可能存在一些特殊情况,我 ...