求一个复杂的SQL语句问题

farandfaraway 2005-09-29 12:03:07
我有如下的一张表
t_name t_total t_date
---------------------------------------
A 10 2005.3.7
B 5 2005.3.7
C 1 2005.3.7
D 20 2005.8.8
F 10 2005.8.8
C 8 2005.8.8
A 20 2005.8.10
B 15 2005.8.10
... ... ...
各种不同名称的商品在不同的日期数量是不同的,我想得到各种商品最新的数量,也就是最后一次出现该商品时候的数量,请问可以通过一句SQL语句实现吗,或者有什么其它方法可以得到吗
...全文
129 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxzm1001 2005-09-29
  • 打赏
  • 举报
回复
select distinct a.* from tablename a,(select t_name as tname,max(t_date) as tdate from tablename) b where a.t_name=b.tname and a.t_date=b.tdate
farandfaraway 2005-09-29
  • 打赏
  • 举报
回复
而且各种商品也不是同时在最大的日期内出现,有的也许最后一次出现是几天前,所以这个SQL不对
farandfaraway 2005-09-29
  • 打赏
  • 举报
回复
我用的是VFP6不支持这种写法,怎么办
farandfaraway 2005-09-29
  • 打赏
  • 举报
回复
我用的是VFP6不支持这种写法,怎么办
farandfaraway 2005-09-29
  • 打赏
  • 举报
回复
没有啊,我是select * from table into table mytable 这样得到的自由表,和原来表中的数据一样但是同样的sql查询的结果却不同
farandfaraway 2005-09-29
  • 打赏
  • 举报
回复
没有啊,我是select * from table into table mytable 这样得到的自由表,和原来表中的数据一样但是同样的sql查询的结果却不同
十豆三 2005-09-29
  • 打赏
  • 举报
回复
你的要求是根据时间t_name中各种物品最后一次出现时候时t_total的值。

可是我的表是自由表,得到的结果是最后一次出现的结果(VFP6.0)

是不是你的表有索引呀
farandfaraway 2005-09-29
  • 打赏
  • 举报
回复
是根据时间t_name中各种物品最后一次出现时候时t_total的值就是你说的SELECT * FROM 表名 GROUP BY 1那个的结果,但是如果我这个表是一个自由表,查询的结果就有可能不正确了,t_total好像就不是按时间排序后的值了,我试试set order to看看吧
zsjiaming 2005-09-29
  • 打赏
  • 举报
回复
//-我GROUP by t_name order by t_date 当数据在一个自由表里时,感觉取的不是最后的值,随机
//的;当我数据在我数据库里的一个表里时候结果是正确的,两个表完全一致,怎么会事


..........在select 里用Order 处理不了你的问题.........

因为..select ...里的 ..order.....是前面语句全部处理完后....输出结果时才开始排序...
所以你要试..就试.....SET ORDER to tag 'XXX' 这个......
十豆三 2005-09-29
  • 打赏
  • 举报
回复
你不是要字段 t_name 的最后一一次出现该商品时候的数量吗?

我上面得到的结果是你想要的吗?还是字段 t_name 最后日期的数据?
farandfaraway 2005-09-29
  • 打赏
  • 举报
回复
我GROUP by t_name order by t_date 当数据在一个自由表里时,感觉取的不是最后的值,随机的;当我数据在我数据库里的一个表里时候结果是正确的,两个表完全一致,怎么会事
zsjiaming 2005-09-29
  • 打赏
  • 举报
回复
借用版主的方法:

方法3
因为不知分组取的时候,是取第一条记录还是最后一条记录,所以用二种方法试试
[A]:&&日期降序,如果是取第一个记录 要事先对日期有过索引...
set order to 't_date' in 表A DESCENDING &&t_date改成日期字段实际索引标识名
SELECT * FROM your_dbc_name!表A GROUP BY t_name into you_temp_dbf


*[B]:日期降序,如果是取最后一个记录 要事先对日期有过索引...
*按日期排序,
set order to 't_date' in 表A &&t_date 改成日期字段实际索引标识名
SELECT * FROM your_dbc_name!表A GROUP BY t_name into you_temp_dbf

楼主如果试了,请说一下结果..........
zsjiaming 2005-09-29
  • 打赏
  • 举报
回复
select a.t_name,max(a.t_date);
from your_dbc_name!a ;
group by a.t_name;
into cursor temp1

select temp.*, a.t_total;
from temp;
left join your_dbc_name!a;
on temp.t_name==a.t_name;
into cursor your_temp_dbf
不知哪种方法更快......还有其它方法.....
十豆三 2005-09-29
  • 打赏
  • 举报
回复
SELECT * FROM 表名 GROUP BY 1

得到如下结果

t_name t_total t_date
---------------------------------------
A 20 2005.8.10
B 15 2005.8.10
C 8 2005.8.8
D 20 2005.8.8
F 10 2005.8.8
zsjiaming 2005-09-29
  • 打赏
  • 举报
回复
select a.t_name,;
max(a.t_date),;
sum(iif(a.t_date==max(a.t_date),a.t_total,0) as new_t_total;
from your_dbcname!a ;
group by a.t_name;
into cursor your_temp_dbf

十豆三 2005-09-29
  • 打赏
  • 举报
回复
SELECT * FROM 表名 GROUP BY 1

2,722

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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