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数据分组后取最大值或者取前几个值(依照某一列排序)
今日做项目的时候,项目中遇到须要将数据分组后,分组中的最大值,想了想,不知道怎么做.于是网上查了查,最终找到了思路,经过比較这个查询时眼下用时最快的,事实上还有别的方法,可是我认为我们仅仅掌握最快的方 ...
随机推荐
- ES6-let、const和块级作用域
1.介绍 总的来说,ES6是在ES2015的基础上改变了一些书写方式,开放了更多API,这样做的目的最终还是为了贴合实际开发的需要.如果说一门编程语言的诞生是天才的构思和实现,那它的发展无疑就是不断填 ...
- android学习-仿Wifi模块实现
最近研究android内核-系统关键服务的启动解析,然而我也不知道研究wifi的作用,就当兴趣去做吧(其实是作业-_-) 系统原生WiFI功能大概有:启动WiFI服务,扫描WiFi信息(这个好像已经被 ...
- java HashMap源码分析(JDK8)
这两天在复习JAVA的知识点,想更深层次的了解一下JAVA,所以就看了看JAVA的源码,把自己的分析写在这里,也当做是笔记吧,方便记忆.写的不对的地方也请大家多多指教. JDK1.6中HashMap采 ...
- centos7设置SSH安全策略–指定IP登陆
之前自己搭建了个博客网站(理想三旬),写了些文章,但是由于一些原因慢慢将文章放在博客园了.所以这里将一些文章复制过来.便于以后自己查询. 为了服务器的安全性,我们在日常使用需要授予权限和指定ip登陆来 ...
- Oracle 12c 建表空间语句
create tablespace TBS_DYS datafile 'D:/Oracle_12c/app/dingyingsi/oradata/dingyingsi/TBS_DYS.ba' size ...
- java开学考试感想及代码
上周四我们的第一节java课,王老师给我们进行啦开学考试,这也是上学期放假之前给我们约定好的 但是情况显然没有我想的那么好,其实我觉得这个atm系统比上届学生信息管理系统难的多,上届的话毕竟有小学期的 ...
- [转]数据库中Schema(模式)概念的理解
在学习数据库时,会遇到一个让人迷糊的Schema的概念.实际上,schema就是数据库对象的集合,这个集合包含了各种对象如:表.视图.存储过程.索引等. 如果把database看作是一个仓库,仓库很多 ...
- jQuery ajax - getJSON() 用法实例
实例 从 test.js 载入 JSON 数据并显示 JSON 数据中一个 name 字段数据: $.getJSON("test.js", function(json){ aler ...
- jQuery设置下拉框select 默认选中第一个option
$("#id option:first").prop("selected", 'selected');
- java后台工具类-通过交易码获得方法名
import org.apache.log4j.Logger; import net.sf.json.JSONObject; public class GetResultByTransCode { p ...