进货表中,各位商品先入先出,碰到难题

NetworkConfigurer 2011-01-24 10:52:04
在设计数据库查询时碰到一个问题,困扰里好几天,进度严重滞后,不得已上来求救烦请各位大侠出手相救

数据表receive_list的结构如下
r_id r_name r_moedl r_spec r_price r_Ftype r_type r_stock r_date
1 微星G31主板 G31 总线1333 380 电源主件 主板 20 2011-1-20 12:56:37
2 微星G31主板 G31 总线1333 360 电脑主件 主板 10 2011-1-22 14:50:17
3 航嘉冷静王电源 V2.1 400W 260 电脑主件 电源 10 2011-1-19 16:22:53
4 航嘉冷静王电源 V2.1 400W 280 电脑主件 电源 0 2011-1-17 11:32:43
5 佳能激光打印机 3210 激光打印 700 办公设备 打印机 2 2011-1-10 10:25:33
6. 施乐针式打印机 2020 针式打印 1500 办公设备 打印机 0 2011-1-9 11:35:40

通过SQL搜索出来的结果应该是这样的
1 微星G31主板 G31 总线1333 380 电源主件 主板 20 2011-1-20 12:56:37
3 航嘉冷静王电源 V2.1 400W 260 电源主件 电源 10 2011-1-19 16:22:53
5 佳能激光打印机 3210 激光打印 700 办公设备 打印机 2 2011-1-10 10:25:33

也就是说,搜索该表里各类商品里库存不为0且进货日期最早的记录,主要是各类商品要搜索出来的时候要判断库存不为0的情况下进货日期最早
困扰了几天了,麻烦各位高手出手相救,先谢过啦
问题补充:
也就是说
这个主要是用在给操作员操作的时候选择出售商品的时候用的,主要是在DBGrid中显示出可出售的商品
各位商品先进先出,例如那个电源,
4 航嘉冷静王电源 V2.1 400W 280 电源 0 2011-1-17 11:32:43

库存为0.表示这批进货已经卖完了,下次人家过来买电源,应该卖的是这个
3 航嘉冷静王电源 V2.1 400W 260 电源 10 2011-1-19 16:22:53

像那个 主板 两批的进货都还没卖完,所以先出的是库存不为0,进货时间最早的这条
1 微星G31主板 G31 总线1333 380 主板 20 2011-1-20 12:56:37

像那个打印机,施乐针式打印机库存为0,所以不显示该记录

佳能打印机还有库存,所以显示该进货记录
5 佳能激光打印机 3210 激光打印 700 办公设备 打印机 2 2011-1-10 10:25:33

...全文
179 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
-晴天 2011-01-25
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 xiaoyehua 的回复:]
一来又学到一招!
总D来说这个帖子有3个地方是值得我学习D
1、知道原来有计划这个功能
2、进来SQL版出现不少在一个表内同类之间选择优先过滤的问题
3、group的性能差。
[/Quote]
group 只是在这样的应用时性能不如用子程序直接比较,要进行统计的时候,还是得用它的.
xiaoyehua 2011-01-25
  • 打赏
  • 举报
回复
一来又学到一招!
总D来说这个帖子有3个地方是值得我学习D
1、知道原来有计划这个功能
2、进来SQL版出现不少在一个表内同类之间选择优先过滤的问题
3、group的性能差。
NetworkConfigurer 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 qianjin036a 的回复:]

sqlserver企业管理器!
在执行/分析按钮旁边有个带三个绿色小方框图的按钮,叫做显示估计的执行计划.

如果你以后做到上万记录的,效率就得认真考虑了,现在至少应该知道这些.
[/Quote]

谢谢你,我去看看先,看来要学的东西太多了,呵呵
-晴天 2011-01-24
  • 打赏
  • 举报
回复
sqlserver企业管理器!
在执行/分析按钮旁边有个带三个绿色小方框图的按钮,叫做显示估计的执行计划.

如果你以后做到上万记录的,效率就得认真考虑了,现在至少应该知道这些.
NetworkConfigurer 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 qianjin036a 的回复:]

前者只是嵌套循环,而后者要进行匹配聚合,运行所需开销相差比较大.
[/Quote]

因为我的系统不大,所以开始没想到这个效率的问题,真还是需要好好学习学习啦
NetworkConfigurer 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 qianjin036a 的回复:]

[/Quote]

兄弟,你这个是什么软件啊?
-晴天 2011-01-24
  • 打赏
  • 举报
回复
前者只是嵌套循环,而后者要进行匹配聚合,运行所需开销相差比较大.
-晴天 2011-01-24
  • 打赏
  • 举报
回复
NetworkConfigurer 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 qianjin036a 的回复:]

引用 23 楼 networkconfigurer 的回复:
引用 21 楼 qianjin036a 的回复:

引用 19 楼 networkconfigurer 的回复:
使用maco_wang兄弟的语句解决了问题,困扰了好几天了,非常感谢你们

最好不要用带 group by 语句的,效率会很差.


你的也可以,真的不好意思啦,现在结贴了还能给分吗?

分无所谓的,……
[/Quote]

非常感谢,我是第一次在CSDN上发帖,所以。。。
-晴天 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 networkconfigurer 的回复:]
引用 21 楼 qianjin036a 的回复:

引用 19 楼 networkconfigurer 的回复:
使用maco_wang兄弟的语句解决了问题,困扰了好几天了,非常感谢你们

最好不要用带 group by 语句的,效率会很差.


你的也可以,真的不好意思啦,现在结贴了还能给分吗?
[/Quote]
分无所谓的,我只是帮助你而已.
-晴天 2011-01-24
  • 打赏
  • 举报
回复
select * from receive_list a where r_stock<>0 and not exists(select 1 from receive_list where r_stock<>0 and r_name=a.r_name and r_date<a.r_date)

select t.* from receive_list t inner join (select min(r_date) as r_date from receive_list where r_stock<>0 group by r_name) m on t.r_date=m.r_date

这两句并列运行,显示执行计划,可知,前一句占开销的 16%,后一句占 84%.
不信你自己测试一下.
NetworkConfigurer 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 qianjin036a 的回复:]

引用 19 楼 networkconfigurer 的回复:
使用maco_wang兄弟的语句解决了问题,困扰了好几天了,非常感谢你们

最好不要用带 group by 语句的,效率会很差.
[/Quote]

你的也可以,真的不好意思啦,现在结贴了还能给分吗?
NetworkConfigurer 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 qianjin036a 的回复:]

引用 19 楼 networkconfigurer 的回复:
使用maco_wang兄弟的语句解决了问题,困扰了好几天了,非常感谢你们

最好不要用带 group by 语句的,效率会很差.
[/Quote]

不好意思,结贴了才看到,非常感谢你,我再测试下你写,谢谢啦
-晴天 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 networkconfigurer 的回复:]
使用maco_wang兄弟的语句解决了问题,困扰了好几天了,非常感谢你们
[/Quote]
最好不要用带 group by 语句的,效率会很差.
叶子 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 networkconfigurer 的回复:]
引用 14 楼 maco_wang 的回复:

更新一下:
SQL code

select t.* from receive_list t inner join (select min(r_date) as r_date from receive_list where r_stock<>0 group by r_name) m on t.r_date=m.r_date


这个跟……
[/Quote]
区别是表名和表变量 下面的多了个@
NetworkConfigurer 2011-01-24
  • 打赏
  • 举报
回复
使用maco_wang兄弟的语句解决了问题,困扰了好几天了,非常感谢你们
NetworkConfigurer 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 qianjin036a 的回复:]

用带数据验证程序中的这个查询语句.前面的语句有问题.
[/Quote]

差不多啦,谢谢您啦,我正在验证maco_wang兄弟的语句,好像他的可以,非常感谢你们
NetworkConfigurer 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 maco_wang 的回复:]

更新一下:
SQL code

select t.* from receive_list t inner join (select min(r_date) as r_date from receive_list where r_stock<>0 group by r_name) m on t.r_date=m.r_date
[/Quote]

这个跟前面的有什么不同吗
-晴天 2011-01-24
  • 打赏
  • 举报
回复
用带数据验证程序中的这个查询语句.前面的语句有问题.
-晴天 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 networkconfigurer 的回复:]
引用 11 楼 qianjin036a 的回复:

居然贴错了!


你的第二条差不多了,就是出现我给你回帖中的那种错误

这个没有搜出库存为0的记录了,但是我把G31主板的最早进货记录库存改为0之后就再搜不出G31主板的记录了,本来应该搜索到第二条记录的
1 微星G31主板 G31 总线1333 380 电源主件 主板 0 2011-1-20 12:56:37
2 微星G31主……
[/Quote]
不会吧!

create table receive_list(r_id int,r_name nvarchar(10),r_moedl nvarchar(10),r_spec nvarchar(10),r_price int,r_Ftype nvarchar(10),r_type nvarchar(10),r_stock int,r_date datetime)
insert into receive_list select 1,'微星G31主板','G31','总线1333',380,'电源主件','主板',0,'2011-1-20 12:56:37' --这儿改为0
insert into receive_list select 2,'微星G31主板','G31','总线1333',360,'电脑主件','主板',10,'2011-1-22 14:50:17'
insert into receive_list select 3,'航嘉冷静王电源','V2.1','400W',260,'电脑主件','电源',10,'2011-1-19 16:22:53'
insert into receive_list select 4,'航嘉冷静王电源','V2.1','400W',280,'电脑主件','电源',0,'2011-1-17 11:32:43'
insert into receive_list select 5,'佳能激光打印机','3210','激光打印',700,'办公设备','打印机',2,'2011-1-10 10:25:33'
insert into receive_list select 6,'施乐针式打印机','2020','针式打印',1500,'办公设备','打印机',0,'2011-1-9 11:35:40'
go
select * from receive_list a where r_stock<>0 and not exists(select 1 from receive_list where r_stock<>0 and r_name=a.r_name and r_date<a.r_date)
go
drop table receive_list
/*
r_id r_name r_moedl r_spec r_price r_Ftype r_type r_stock r_date
----------- ---------- ---------- ---------- ----------- ---------- ---------- ----------- -----------------------
2 微星G31主板 G31 总线1333 360 电脑主件 主板 10 2011-01-22 14:50:17.000
3 航嘉冷静王电源 V2.1 400W 260 电脑主件 电源 10 2011-01-19 16:22:53.000
5 佳能激光打印机 3210 激光打印 700 办公设备 打印机 2 2011-01-10 10:25:33.000

(3 行受影响)

*/
加载更多回复(14)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧