SYBASE查询语句问题,高分相求!!!!!!!!(300分)

  • 主题发起人 主题发起人 阿魁
  • 开始时间 开始时间

阿魁

Unregistered / Unconfirmed
GUEST, unregistred user!
表格:
字段名 字段说明 字段类型 备注
QUHAO 所在地区区号 Varchar(4) 青岛地区固定为0532
PAPERID 报纸类型 Int 当前固定为1
SF_ID 身份证号码 Varchar(20)
QIHAO 游戏期号 Varchar(4)
LEVEL1 第一关答案 Varchar(10)
LEVEL2 第二关得分 Int 缺省值为0,即没有过关
LEVEL3 第三关得分 Int 缺省值为0,即没有过关
LEVEL4 第四关得分 Int 缺省值为0,即没有过关
DATE_TIME 最近一次积分变动的时间 Varchar(15) 精确到秒

说明:
1、QIHAO代表游戏期号;
2、LEVEL2~LEVEL4代表各期得分;
3、DATE_TIME代表最后一次积分变动的时间;

查询要求:
给出期号(可以是单期,可以多期),按照积分进行排名;
如果积分相同,先取得某一SF_ID对应的最大DATE_TIME,取得的DATE_TIME最小的,排名越靠前;

我的语句如下:
select distinct SF_ID,sum(LEVEL2+LEVEL3+LEVEL4) AS score,max(convert(DATETIME,DATE_TIME)) as date_time
from TCG_SCORE where QIHAO='1019' group by SF_ID having QIHAO='1019'
order by sum(LEVEL2+LEVEL3+LEVEL4) DESC,convert(DATETIME,DATE_TIME)

这是对单期(1019期)的数据进行排名,似乎没有问题,已经验证过。
但如果改成:
select distinct SF_ID,sum(LEVEL2+LEVEL3+LEVEL4) AS score,max(convert(DATETIME,DATE_TIME)) as date_time
from TCG_SCORE where QIHAO in ('1019','1020') group by SF_ID having QIHAO in ('1019','1020')
order by sum(LEVEL2+LEVEL3+LEVEL4) DESC,convert(DATETIME,DATE_TIME)

就会出现SF_ID重复的现象。

十分苦恼,请各位不吝赐教。
分不够再加。
 
鄙人对复杂的查询语句实在是没有研究。
不过什么方式,只要一条语句实现,就给分。
 
只知道sql server
max(sum(LEVEL2+LEVEL3+LEVEL4) AS score)
 
青岛的朋友可以电话联系,交个朋友:
电话:5758329 刘世魁
 
你要用一條語句實現嗎,我想用多個 View 實現方便一點
先用一個語句實現 MAX,MIN
然後對上一個 View實行操作。。。
你是用的SQL SERVERK嗎,上面的回復謹限於 SQL SERVER
 
感觉 Having这个条件是多余的,去掉试试。:)
 
select distinct SF_ID,
sum(LEVEL2+LEVEL3+LEVEL4) AS score,
(Select Count(*)+1 from TCG_SCORE AS TB1
Where (TB1.level2+TB1.level3+TB1.level4)<level2+level3+level4
and TB1.QIHAO in('1019','1020')
AND TB1.DateTime<=DateTime
) AS 名次
FROM TCG_SCORE
WHERE QIHAO in('1019','1020')
order by sum(LEVEL2+LEVEL3+LEVEL4) DESC,convert(DATETIME,DATE_TIME)
没有库,不过你可以试试
 
搞定了。
受到FRAMER多视图的启发,不过我只用了一个视图。
也感谢lvxq的帮助,虽然我看不懂,单也知道你是真心帮忙,谢谢了!

下面是我的实现方案:

1、建立临时视图,名称是随机生成的,例如:TMP0001
2、视图定义:create view TMP0001 as select * from TCG_SCORE where QIHAO in (QIHAO_LIST_HERE)
3、排名查询:select SF_ID from TMP0001 group by SF_ID order by sum(LEVEL2+LEVEL3+LEVEL4) DESC,max(convert(DATETIME,DATE_TIME))

显示前N条数据即可。

大家的讨论令鄙人受益匪浅,谢谢!
 
最后别忘了删掉临时视图
 
不能够啊,看你也不是第一次使用sql语句,应该能看懂我的呀,只不过是一个
子查询而已啊,如果你在我的语句前加上Create View ....as 也可以创建成一个
view,然后,列出名次小于几的就够了呀
 
后退
顶部