select l.id, l.name, l.price, max(r.time), l.number
from table l
join table r
on l.time = r.time and l.id = r.id
group by l.id, l.name, l.price, l.number
没来得及试,你自己试一试吧。
from table l
join table r
on l.time = r.time and l.id = r.id
group by l.id, l.name, l.price, l.number
没来得及试,你自己试一试吧。
l和r是什么呢,这里只有一张表proc呀。
from proc l
join proc r
on l.time = r.time and l.id = r.id
group by l.id, l.name, l.price, l.number
自联接时要给表起别名。
select id,name,price,time,number
from proc x
where time in (select max(time) from proc
where id = x.id);****请不要用number这样的关键字做字段名,ok?
谢谢。
可是你的语句会不会产生这样一种情况:
商品a在05/02/2001、03/21/2001有记录;商品b的最新记录为03/21/2001,
列出来的结果中a会出现自己的最新记录05/02/2001和它与b最新记录同进的记录03/21/2001呢?
而且联接快,
如果要用KingSunSha的方法
把括号中的语句改为
select id from proc
having time = max(time)
group by name
我的办法绝对没错
不过语句的细节可能不对
我在网吧
没法试
对不起
select id,name,price,time,number
from proc x
where time in (select max(time) from proc
where name = x.name)
oracle:
select id,name,price,time,number
from proc x
where time in (select max(time) from proc
where name = x.name); ccat(阿猫) 的方法是得不到要求的,因为你GROUP BY了ID,而表中的ID是唯一的。
在自联接中,有一个迪卡尔积,不Group by ID才真的会出人命
不信你试试
:P
貨品的價格, 一般可以用
1). 平均價格 2).早入早出(FIFO) 3). 早入遲出(FILO) 4). 標準價(Standard
price) 等方式計算.
舉 (FIFO)為例, 你就要用最舊的價錢來反影當時出貨價格.
如 先入1000件的價為$10, 第2批為$15.
當出貨時是用$10, 直至該1000件均售出, 才會是$15. 庫存價是買入總價值
減去總出貨價.
SELECT id, name, price, time
FROM proc a
WHERE id =
(SELECT MAX(id)
FROM proc b
WHERE a.name = b.name
GROUP BY name)
我可以确认我写的语句是完全满足你的要求的,如果象你说的,商品a在05/02/2001、03/21/2001有记录;商品b的最新记录为03/21/2001,列出来的结果中a只会出现自己的最新记录05/02/2001,因为对商品a的查询,会加上一个判断条件:a.time = (select max(time) from b...),这个子查询会返回一个结果为05/02/2001,那就只会找到05/02/2001的纪录。明白了吗?wbsl(何苦):
你的语句看起来不怪吗?
select max(x)
from proc b
where b.name = a.name --对每个子查询来说a.name是常量
group by name --那为什么还要对一个常量做group by
id name price time number
345 a 1.0 05/03/2001 4
346 a 2.0 02/01/2001 2
347 a 3.0 11/03/2001 6
那用如下的查询:
select l.id, l.name, l.price, max(r.time), l.number
from proc l join proc r
on l.time = r.time and l.id = r.id
group by l.id, l.name, l.price, l.number
得到的结果将是和原纪录一模一样的。不信你做个测试。
而且看得出来id是这个表的主键,是唯一的,用on l.time = r.time and l.id = r.id做连接其中的l.time = r.time完全是多此一举,主键都相同了,那time会不同吗?
ccat(阿猫) 不能得到正确答案
KingSunSha(弱水三千) 不能得到正确答案(在sql里)
Yang_(扬帆破浪) 可以得到正确答案
以上测试所用数据为贴主所给出的数据
from proc x
where time=(select max(time) from proc where name = x.name)