sql语句,表达式的问题?
一直以来对sql中group by的表达式不是理解的太清楚!
现有以下数据和sql查询,请问可不可以用表达式把iPrice的值求出来?
表:
id cInvCode cDate cUserName iPrice
1 01019 2005-1-21 19:38:00 sjz ¥211.00
2 02030 2005-1-21 19:38:00 sjz ¥77.00
3 02031 2005-1-21 19:38:00 sjz ¥66.00
4 02068 2005-1-21 19:38:00 sjz ¥55.00
5 01019 2005-1-21 19:45:00 sjz ¥211.00
6 02030 2005-1-21 19:46:00 sjz ¥77.00
7 02031 2005-1-21 19:46:00 sjz ¥66.00
8 02068 2005-1-21 19:46:00 sjz ¥55.00
9 02097 2005-1-21 19:46:00 sjz ¥455.00
10 01019 2005-1-21 19:44:00 sjz ¥211.00
11 02030 2005-1-21 19:44:00 sjz ¥77.00
12 02031 2005-1-21 19:44:00 sjz ¥66.00
13 02068 2005-1-21 19:44:00 sjz ¥55.00
14 02097 2005-1-21 19:44:00 sjz ¥455.00
15 01019 2005-1-21 19:47:00 zz ¥123.00
16 02030 2005-1-21 19:47:00 zz ¥423.00
17 02031 2005-1-21 19:47:00 zz ¥56.00
18 02068 2005-1-21 19:47:00 zz ¥456.00
19 02097 2005-1-21 19:47:00 zz ¥786.00
20 03055 2005-1-21 19:47:00 zz ¥78.00
21 03056 2005-1-21 19:47:00 zz ¥789.00
22 03058 2005-1-21 19:47:00 zz ¥890.00
23 03061 2005-1-21 19:47:00 zz ¥34.00
24 03062 2005-1-21 19:47:00 zz ¥545.00
25 03096 2005-1-21 19:47:00 zz ¥345.00
26 04030 2005-1-21 19:47:00 zz ¥345.00
27 01019 2005-1-22 11:15:00 sjz ¥123.00
28 02030 2005-1-22 11:15:00 sjz ¥4,324.00
29 02031 2005-1-22 11:15:00 sjz ¥456.00
30 02068 2005-1-22 11:15:00 sjz ¥567.00
31 02097 2005-1-22 11:15:00 sjz ¥768.00
32 03055 2005-1-22 11:15:00 sjz ¥789.00
33 03056 2005-1-22 11:15:00 sjz ¥89.00
34 03058 2005-1-22 11:15:00 sjz ¥45.00
35 03061 2005-1-22 11:15:00 sjz ¥234.00
36 03062 2005-1-22 11:15:00 sjz ¥345.00
37 03096 2005-1-22 11:15:00 sjz ¥34.00
38 04030 2005-1-22 11:15:00 sjz ¥234.00
39 04047 2005-1-22 11:15:00 sjz ¥234.00
40 04049 2005-1-22 11:15:00 sjz ¥456.00
41 04058 2005-1-22 11:15:00 sjz ¥5,645.00
42 04097 2005-1-22 11:15:00 sjz ¥567.00
43 04030 2005-1-22 11:16:00 sjz ¥22.00
44 04047 2005-1-22 11:16:00 sjz ¥33.00
45 04049 2005-1-22 11:16:00 sjz ¥44.00
46 04058 2005-1-22 11:16:00 sjz ¥55.00
47 04097 2005-1-22 11:16:00 sjz ¥66.00
48 04099 2005-1-22 11:16:00 sjz ¥77.00
49 07051 2005-1-22 11:16:00 sjz ¥88.00
50 17047 2005-1-22 11:16:00 sjz ¥99.00
51 01019 2005-1-22 15:09:00 sjz ¥123.00
52 02030 2005-1-22 15:09:00 sjz ¥22.00
53 02031 2005-1-22 15:09:00 sjz ¥33.00
54 02068 2005-1-22 15:09:00 sjz ¥44.00
55 02097 2005-1-22 15:09:00 sjz ¥55.00
56 03055 2005-1-22 15:09:00 sjz ¥66.00
57 03056 2005-1-22 15:09:00 sjz ¥77.00
58 03058 2005-1-22 15:09:00 sjz ¥88.00
想得到以下结果:
各用户的最近一次的编号的价格:
cInvCode 最近日期 cUserName iPrice
17047 2005-1-22 11:16:00 sjz ¥99.00
07051 2005-1-22 11:16:00 sjz ¥88.00
04099 2005-1-22 11:16:00 sjz ¥77.00
04097 2005-1-22 11:16:00 sjz ¥66.00
04058 2005-1-22 11:16:00 sjz ¥55.00
04049 2005-1-22 11:16:00 sjz ¥44.00
04047 2005-1-22 11:16:00 sjz ¥33.00
04030 2005-1-21 19:47:00 zz ¥345.00
04030 2005-1-22 11:16:00 sjz ¥22.00
03096 2005-1-21 19:47:00 zz ¥345.00
03096 2005-1-22 11:15:00 sjz ¥34.00
03062 2005-1-21 19:47:00 zz ¥545.00
03062 2005-1-22 11:15:00 sjz ¥345.00
03061 2005-1-21 19:47:00 zz ¥34.00
03061 2005-1-22 11:15:00 sjz ¥234.00
03058 2005-1-21 19:47:00 zz ¥890.00
03058 2005-1-22 15:09:00 sjz ¥88.00
03056 2005-1-21 19:47:00 zz ¥789.00
03056 2005-1-22 15:09:00 sjz ¥77.00
03055 2005-1-21 19:47:00 zz ¥78.00
03055 2005-1-22 15:09:00 sjz ¥66.00
02097 2005-1-21 19:47:00 zz ¥786.00
02097 2005-1-22 15:09:00 sjz ¥55.00
02068 2005-1-21 19:47:00 zz ¥456.00
02068 2005-1-22 15:09:00 sjz ¥44.00
02031 2005-1-21 19:47:00 zz ¥56.00
02031 2005-1-22 15:09:00 sjz ¥33.00
02030 2005-1-21 19:47:00 zz ¥423.00
02030 2005-1-22 15:09:00 sjz ¥22.00
01019 2005-1-21 19:47:00 zz ¥123.00
01019 2005-1-22 15:09:00 sjz ¥123.00
用以下语句可以实现:
SELECT a.*, b.iPrice
FROM dbo.RdRecords b INNER JOIN
(SELECT cInvCode, MAX(cDate) AS 最近日期, cUserName
FROM dbo.RdRecords
GROUP BY cInvCode, cUserName) a ON b.cInvCode = a.cInvCode AND
b.cDate = a.最近日期 AND b.cUserName = a.cUserName
想问的是可不可用一条语句把iPrice求出来,不用再做内嵌表查询?
也就是这样做:
SELECT cInvCode, MAX(cDate) AS 最近日期, cUserName,iPrice
FROM dbo.RdRecords
GROUP BY cInvCode, cUserName
但是这样做的话提示iPrice即不包含在聚合函数中也不包含在group by语句中!
如果用表达式做的应该怎么做?
问题点数:100、回复次数:4Top
1 楼didoleo(冷月无声)回复于 2005-01-22 22:13:47 得分 50
select * from dbo.RdRecords a
where not exists
(select 1 from dbo.RdRecords where
cInvCode=a.cInvCode and cUserName=a.cUserName
and cDate>a.cDate)Top
2 楼playyuer(退休干部 卧鼠藏虫)回复于 2005-01-22 23:30:27 得分 50
select *
from RdRecords a
where not exists (select 1
from RdRecords
where cUserName = a.cUserName
and
cDate > a.cDate)
select *
from RdRecords a
where cDate = (select max(cDate)
from RdRecords
where cUserName = a.cUserName
)Top
3 楼crazystudio(待从头,收拾旧山河)回复于 2005-01-23 09:07:52 得分 0
playyuer(退休干部 卧鼠藏虫) 您好:
这两组语句取出的结果不一样!Top
4 楼crazystudio(待从头,收拾旧山河)回复于 2005-01-23 09:16:18 得分 0
SELECT *
FROM dbo.RdRecords a
WHERE (cDate =
(SELECT MAX(cDate)
FROM RdRecords
WHERE cUserName = a.cUserName AND cInvCode = a.cInvCode))Top




