首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

怎么查出这个值

2013-01-04 
如何查出这个值我有一张表 idshuzi193.5282.5376.5465554663.5770.5853.5958.51068.5如何能查找相邻3个id

如何查出这个值
我有一张表 id  shuzi
          1   93.5
          2   82.5
          3   76.5
          4   65
          5   54
          6   63.5
          7   70.5
          8   53.5
          9   58.5
          10  68.5
如何能查找相邻3个id号所对应的sum值最大呢
(1,2,3)(2,3,4)(3,4,5)。。。
[解决办法]


SELECT MAX(a) FROM (
SELECT SUM(a) a FROM person  WHERE ID<4
UNION SELECT  SUM(a) a FROM person  WHERE ID<5 AND ID>1
UNION SELECT  SUM(a) a FROM person  WHERE ID<6 AND ID>2
UNION SELECT  SUM(a) a FROM person  WHERE ID<7 AND ID>3
……………………………………………………………………………………
UNION SELECT  SUM(a) a FROM person  WHERE ID<11 AND ID>7
)


随手写的,这个方法比较笨,单纯的SQL是不可能实现的吧,但用PL-SQL很容易实现只要把上面id的范围写成动态的就可以。

[解决办法]
WITH TEST AS (
SELECT '01' AS ID,93.5 AS SHUZI FROM DUAL
UNION ALL
SELECT '02' AS ID,82.5 AS SHUZI FROM DUAL
UNION ALL
SELECT '03' AS ID,76.5 AS SHUZI FROM DUAL
UNION ALL
SELECT '04' AS ID,65 AS SHUZI FROM DUAL
UNION ALL
SELECT '05' AS ID,54 AS SHUZI FROM DUAL
UNION ALL
SELECT '06' AS ID,63.5 AS SHUZI FROM DUAL
UNION ALL
SELECT '07' AS ID,70.5 AS SHUZI FROM DUAL
UNION ALL
SELECT '08' AS ID,53.5 AS SHUZI FROM DUAL
UNION ALL
SELECT '09' AS ID,58.5 AS SHUZI FROM DUAL
UNION ALL
SELECT '10' AS ID,68.5 AS SHUZI FROM DUAL
)
SELECT GREATEST(SHUZI, NS, NNS) AS RESULTSHUZI
  FROM (SELECT SHUZI,
               LEAD(SHUZI, 1) OVER(ORDER BY ID) AS NS,
               LEAD(SHUZI, 2) OVER(ORDER BY ID) AS NNS
          FROM TEST)
 WHERE GREATEST(SHUZI, NS, NNS) IS NOT NULL

================================================================
193.5
282.5
376.5
465
570.5
670.5
770.5
868.5
[解决办法]

WITH tb AS (
    SELECT 1 id,93.5 shuzi FROM DUAL UNION ALL


    SELECT 2 id,82.5 shuzi FROM DUAL UNION ALL
    SELECT 3 id,76.5 shuzi FROM DUAL UNION ALL
    SELECT 4 id,65.5 shuzi FROM DUAL UNION ALL
    SELECT 5 id,54.5 shuzi FROM DUAL
)
SELECT MAX(n.seq_id) KEEP(dense_rank FIRST ORDER BY sum_shuzi DESC) seq_id,
       MAX(n.sum_shuzi) sum_shuzi
 FROM (
SELECT MAX(m.seq_id) seq_id,
       SUM(m.shuzi) sum_shuzi
  FROM (SELECT t.*,
               CONNECT_BY_ROOT(t.ID) root,
               '(' 
[解决办法]
 SUBSTR(SYS_CONNECT_BY_PATH(t.ID, ','), 2) 
[解决办法]
 ')' seq_id,
               LEVEL lv
          FROM tb t
        CONNECT BY PRIOR t.ID = t.ID - 1
               AND LEVEL <= 3) m
 GROUP BY m.root
HAVING MAX(m.lv) = 3
) n

SEQ_ID                                                                            SUM_SHUZI
-------------------------------------------- ----------
(1,2,3)                                                                               252.5


[解决办法]
引用:
SQL code
?



123456789101112131415161718192021222324252627

WITH tb AS (     SELECT 1 id,93.5 shuzi FROM DUAL UNION ALL    SELECT 2 id,82.5 shuzi FROM DUAL UNION ALL    SELECT 3 id,76.5 shuzi ……

太牛了,虚心请教  在实际的数据库开发中,能用得着这些吗?

热点排行