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数据分组后取最大值或者取前几个值(依照某一列排序)
今日做项目的时候,项目中遇到须要将数据分组后,分组中的最大值,想了想,不知道怎么做.于是网上查了查,最终找到了思路,经过比較这个查询时眼下用时最快的,事实上还有别的方法,可是我认为我们仅仅掌握最快的方 ...
随机推荐
- Android 开发工具类 25_getJSON
获取 JSON 数据并解析 import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; im ...
- invalid request block size: 4542 (max 4096)...skip引起的Nginx 502 Bad Geteway
今天有用户报告了一个issue: 当他访问我们的网站时出现了以下错误: 但是我访问同样的地址却没有这个问题,连续访问多次,查看uWSGI日志发现出现以下ERROR: 原来是请求头的大小超出了uWSGI ...
- 数据库报错com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'ua' at row 1
记一次报错记录,成长路上的点滴 明明使用浏览器或者微信开发工具调试接口没有问题,但是在真机测试时候就出问题了.(((¬_¬)) 500服务器内部错误,要死的节奏啊 登陆tomcat服务器 使用命令ta ...
- linux内核学习之保护模式(一)
来源:http://blog.csdn.net/yishuige/article/details/50434746 这一章涉及intel8086系列cpu的保护模式编程,应该是学习内核编程,驱动编程及 ...
- mysql预编译
一.背景: 用Mybatis+mysql的架构做开发,大家都知道,Mybatis内置参数,形如#{xxx}的,均采用了sql预编译的形式,举例如下: <select id=”aaa” param ...
- WPF设置控件获得焦点FocusManager
简单用法如下: 在父类容器中通过附加属性FocusManager.FocusedElement来绑定需要强制获得焦点的控件,用法如下: <Grid FocusManager.FocusedE ...
- java 之 异常处理小结
1 :分类 检查异常(checked,受检) 运行异常(unchecked) 2:捕获异常 try/catch try/catch/finally try/finally try{ //受保 ...
- 推荐的bootstrap之 formgroup表单布局样式
一直没能找到比较好的Form Group样式,直到找到如下样式 转自 https://www.cnblogs.com/jokerjason/p/5721349.html <form class= ...
- Android Studio 打包生成 APK
1. 第一步 Build -> Generate Signed APK 2. 之后会要求开发者输入相关的密钥文件和密码 如果有则找到对应的 .jks 文件输入密码完成相应操作,否则则创建一个对应 ...
- TryParse用法示例
int.Parse()是一种类型转换:表示将数字内容的字符串转为int类型.如果字符串为空,则抛出ArgumentNullException异常:如果字符串内容不是数字,则抛出FormatExce ...