当前在线人数6231
首页 - 分类讨论区 - 电脑网络 - 数据库版 - 同主题阅读文章

此篇文章共收到打赏
0

  • 10
  • 20
  • 50
  • 100
您目前伪币余额:0
未名交友
[更多]
[更多]
出个更难的sql题
[版面:数据库][首篇作者:TheMatrix] , 2019年11月04日12:15:41 ,1288次阅读,42次回复
来APP回复,赚取更多伪币 关注本站公众号:
[首页] [上页][下页][末页] [分页:1 2 ]
TheMatrix
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 1 ]

发信人: TheMatrix (TheMatrix), 信区: Database
标  题: 出个更难的sql题
发信站: BBS 未名空间站 (Mon Nov  4 12:15:41 2019, 美东)

前面版上有一个sql题比较难,是把record有效区间根据内容扩展,这样使碎片的有效
区间可以合并成大的有效区间。这个问题还是一个很常见的问题,我后来又遇到过好几
次。本版最佳答案是用两个row_number函数相减。这是神来之笔啊。我自己也做了答案
,但是比这个神来之笔差不少。现在我自己的答案我已经不记得了,每次都是用这个神
来之笔的答案。

最近又碰到一个相关的问题。更难。但是有了前面的基础,应该还是能做出来的。出给
大家玩一下。先看一下附图中的数据。

这个数据中有一个product和seq。seq是序号,也可以换成data effective date,就是
一个顺序的标志,不一定连续。p1,p2是数据内容。但是内容中有空白,用0表示。不是
0的地方才是真正的数据。

要求是写一个sql把空白的内容填上,填入的值,是同一个product前面最近的一个不是
空白的值。目标答案在第二张地图,new_p1和new_p2两列。

--
☆ 发自 iPhone 买买提 1.24.11
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2607:fb90:b681:]


此主题相关图片如下:

[删除]

此主题相关图片如下:
[删除]

 
nmamtf
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 2 ]

发信人: nmamtf (nmamtf), 信区: Database
标  题: Re: 出个更难的sql题
发信站: BBS 未名空间站 (Mon Nov  4 14:36:38 2019, 美东)

in oracle is very easy. I wrote one for friend for SQL server. using LAG
function.
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 152.]

 
TheMatrix
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 3 ]

发信人: TheMatrix (TheMatrix), 信区: Database
标  题: Re: 出个更难的sql题
发信站: BBS 未名空间站 (Mon Nov  4 17:50:08 2019, 美东)

用analytic function是对的。这是标准SQL的一部分了吧?Oracle有特殊的方法吗?

【 在 nmamtf (nmamtf) 的大作中提到: 】
: in oracle is very easy. I wrote one for friend for SQL server. using LAG
: function.




--
☆ 发自 iPhone 买买提 1.24.11
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2607:fb90:b681:]

 
TheMatrix
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 4 ]

发信人: TheMatrix (TheMatrix), 信区: Database
标  题: Re: 出个更难的sql题
发信站: BBS 未名空间站 (Wed Nov  6 17:26:23 2019, 美东)

没人贴代码?

【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: 前面版上有一个sql题比较难,是把record有效区间根据内容扩展,这样使碎片的有效
: 区间可以合并成大的有效区间。这个问题还是一个很常见的问题,我后来又遇到过好几
: 次。本版最佳答案是用两个row_number函数相减。这是神来之笔啊。我自己也做了答案
: ,但是比这个神来之笔差不少。现在我自己的答案我已经不记得了,每次都是用这个神
: 来之笔的答案。
: 最近又碰到一个相关的问题。更难。但是有了前面的基础,应该还是能做出来的。出给
: 大家玩一下。先看一下附图中的数据。
: 这个数据中有一个product和seq。seq是序号,也可以换成data effective date,就是
: 一个顺序的标志,不一定连续。p1,p2是数据内容。但是内容中有空白,用0表示。不是
: 0的地方才是真正的数据。
: ...................




--
☆ 发自 iPhone 买买提 1.24.11
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 50.]

 
nmamtf
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 5 ]

发信人: nmamtf (nmamtf), 信区: Database
标  题: Re: 出个更难的sql题
发信站: BBS 未名空间站 (Thu Nov  7 10:12:02 2019, 美东)


【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: 没人贴代码?

The logic is little confused.

On row 3, why new_p1 = 3 ?  it should be the pre-row vlaue = 0 right?

Could you double check your logic? Is it related to current row p1 value?



--
※ 修改:·nmamtf 於 Nov  7 10:14:46 2019 修改本文·[FROM: 152.]
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 152.]

 
TheMatrix
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 6 ]

发信人: TheMatrix (TheMatrix), 信区: Database
标  题: Re: 出个更难的sql题
发信站: BBS 未名空间站 (Thu Nov  7 10:36:54 2019, 美东)

p1是本来的值,new_p1是填入空白之后的值,将来是用来代替p1的。对,new_p1的值和
p1的值有关。

规则是这样的:本来不是空白的地方不动;空白的地方填入前面最近的一个不是空白的
值,如果没有,那也不动,还是空白。

【 在 nmamtf (nmamtf) 的大作中提到: 】
: The logic is little confused.
: On row 3, why new_p1 = 3 ?  it should be the pre-row vlaue = 0 right?
: Could you double check your logic? Is it related to current row p1 value?





--
☆ 发自 iPhone 买买提 1.24.11
--
※ 修改:·TheMatrix 於 Nov  7 10:40:39 2019 修改本文·[FROM: 2607:fb90:b68d:8]
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2607:fb90:b68d:]

 
nmamtf
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 7 ]

发信人: nmamtf (nmamtf), 信区: Database
标  题: Re: 出个更难的sql题
发信站: BBS 未名空间站 (Thu Nov  7 10:53:55 2019, 美东)


【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: p1是本来的值,new_p1是填入空白之后的值,将来是用来代替p1的。对,new_p1的值和
: p1的值有关。
: 规则是这样的:本来不是空白的地方不动;空白的地方填入前面最近的一个不是空白的
: 值,如果没有,那也不动,还是空白。


so, if p1 <> null and p1 <> 0, then new_p1 = p1

else new_p1 = 前面最近的一个不是空白的值

right?
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 152.]

 
TheMatrix
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 8 ]

发信人: TheMatrix (TheMatrix), 信区: Database
标  题: Re: 出个更难的sql题
发信站: BBS 未名空间站 (Thu Nov  7 11:29:18 2019, 美东)

对。

【 在 nmamtf (nmamtf) 的大作中提到: 】
: so, if p1 <> null and p1 <> 0, then new_p1 = p1
: else new_p1 = 前面最近的一个不是空白的值
: right?




--
☆ 发自 iPhone 买买提 1.24.11
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2607:fb90:b68d:]

 
nmamtf
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 9 ]

发信人: nmamtf (nmamtf), 信区: Database
标  题: Re: 出个更难的sql题
发信站: BBS 未名空间站 (Thu Nov  7 11:31:56 2019, 美东)

CREATE TABLE THEMATRIXDATA
(
    PRODUCT    VARCHAR2 (1),
    SEQ        INTEGER,
    P1         INTEGER,
    P2         INTEGER
);

INSERT INTO THEMATRIXDATA (PRODUCT,
                           SEQ,
                           P1,
                           P2)
     VALUES ('A',
             1,
             0,
             5);

INSERT INTO THEMATRIXDATA (PRODUCT,
                           SEQ,
                           P1,
                           P2)
     VALUES ('A',
             2,
             0,
             0);

INSERT INTO THEMATRIXDATA (PRODUCT,
                           SEQ,
                           P1,
                           P2)
     VALUES ('A',
             3,
             3,
             0);

INSERT INTO THEMATRIXDATA (PRODUCT,
                           SEQ,
                           P1,
                           P2)
     VALUES ('A',
             4,
             3,
             0);

INSERT INTO THEMATRIXDATA (PRODUCT,
                           SEQ,
                           P1,
                           P2)
     VALUES ('A',
             5,
             0,
             0);

INSERT INTO THEMATRIXDATA (PRODUCT,
                           SEQ,
                           P1,
                           P2)
     VALUES ('A',
             6,
             0,
             6);

INSERT INTO THEMATRIXDATA (PRODUCT,
                           SEQ,
                           P1,
                           P2)
     VALUES ('A',
             7,
             0,
             0);

INSERT INTO THEMATRIXDATA (PRODUCT,
                           SEQ,
                           P1,
                           P2)
     VALUES ('A',
             8,
             4,
             0);

INSERT INTO THEMATRIXDATA (PRODUCT,
                           SEQ,
                           P1,
                           P2)
     VALUES ('B',
             1,
             0,
             5);

INSERT INTO THEMATRIXDATA (PRODUCT,
                           SEQ,
                           P1,
                           P2)
     VALUES ('B',
             2,
             0,
             0);

INSERT INTO THEMATRIXDATA (PRODUCT,
                           SEQ,
                           P1,
                           P2)
     VALUES ('B',
             3,
             3,
             0);

INSERT INTO THEMATRIXDATA (PRODUCT,
                           SEQ,
                           P1,
                           P2)
     VALUES ('B',
             4,
             3,
             0);

INSERT INTO THEMATRIXDATA (PRODUCT,
                           SEQ,
                           P1,
                           P2)
     VALUES ('B',
             5,
             0,
             0);

INSERT INTO THEMATRIXDATA (PRODUCT,
                           SEQ,
                           P1,
                           P2)
     VALUES ('B',
             6,
             0,
             6);

INSERT INTO THEMATRIXDATA (PRODUCT,
                           SEQ,
                           P1,
                           P2)
     VALUES ('B',
             7,
             0,
             0);

INSERT INTO THEMATRIXDATA (PRODUCT,
                           SEQ,
                           P1,
                           P2)
     VALUES ('B',
             8,
             4,
             0);

COMMIT;



  SELECT PRODUCT,
         SEQ,
         P1,
         P2,
         LAG (P1) OVER (ORDER BY PRODUCT, SEQ)     PRE_P1
    FROM THEMATRIXDATA
ORDER BY PRODUCT, SEQ;


  SELECT PRODUCT,
         SEQ,
         P1,
         P2,
         DECODE (P1,  NULL, -1,  0, -1,  1)        AS P1_FLAG, -- CHECK IF
P1 VALUE IS USABLE
         DECODE (P2,  NULL, -1,  0, -1,  1)        AS P2_FLAG, -- CHECK IF
P2 VALUE IS USABLE
         LAG (P1) OVER (ORDER BY PRODUCT, SEQ)     AS PRE_ROW_P1,
         LAG (P2) OVER (ORDER BY PRODUCT, SEQ)     AS PRE_ROW_P2
    FROM THEMATRIXDATA
ORDER BY PRODUCT, SEQ;



SELECT PRODUCT,
       SEQ,
       P1,
       P2,
       P1_FLAG,
       P2_FLAG,
       PRE_ROW_P1,
       PRE_ROW_P2,
       PRE_ROW_P1_FLAG,
       PRE_ROW_P2_FLAG,
       DECODE (
           P1_FLAG,
           1, P1,
           DECODE (PRE_ROW_P1_FLAG,
                   1, PRE_ROW_P1,
                   LAG (PRE_ROW_P1) OVER (ORDER BY PRODUCT, SEQ)))    AS NEW
_P1
  FROM (  SELECT PRODUCT,
                 SEQ,
                 P1,
                 P2,
                 DECODE (P1,  NULL, -1,  0, -1,  1)
                     AS P1_FLAG,                -- CHECK IF P1 VALUE IS
USABLE
                 DECODE (P2,  NULL, -1,  0, -1,  1)
                     AS P2_FLAG,                -- CHECK IF P2 VALUE IS
USABLE
                 LAG (P1) OVER (ORDER BY PRODUCT, SEQ)
                     AS PRE_ROW_P1,
                 LAG (P2) OVER (ORDER BY PRODUCT, SEQ)
                     AS PRE_ROW_P2,
                 DECODE (LAG (P1) OVER (ORDER BY PRODUCT, SEQ), 0, -1, 1)
                     AS PRE_ROW_P1_FLAG,
                 DECODE (LAG (P2) OVER (ORDER BY PRODUCT, SEQ), 0, -1, 1)
                     AS PRE_ROW_P2_FLAG
            FROM THEMATRIXDATA
        ORDER BY PRODUCT, SEQ);
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 152.]

 
nmamtf
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 10 ]

发信人: nmamtf (nmamtf), 信区: Database
标  题: Re: 出个更难的sql题
发信站: BBS 未名空间站 (Thu Nov  7 11:44:48 2019, 美东)

我把幾乎每一步拆分給你。 以免你看不清楚。

最後一步你要自己完成, 呵呵。 那就是, 要是 NEW_P1 是 NULL就設為0 ,  是 0
你要使用上一個非零的值。 用DECODE inline 就可以完成。

另外, 黑色箭頭是涉及 A B 類別的重設, 您自己簡單處理一下

see attached img
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 152.]


此主题相关图片如下:

[删除]

 
nmamtf
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 11 ]

发信人: nmamtf (nmamtf), 信区: Database
标  题: Re: 出个更难的sql题
发信站: BBS 未名空间站 (Thu Nov  7 11:46:44 2019, 美东)

Oracle decode function 是非常好用的。 不知道 SQL 有沒有。

代碼僅供參考。我只是想您能容易理解, 因此寫的比較囉嗦。您自己可以簡化很多。

【 在 nmamtf (nmamtf) 的大作中提到: 】
: 我把幾乎每一步拆分給你。 以免你看不清楚。
: 最後一步你要自己完成, 呵呵。 那就是, 要是 NEW_P1 是 NULL就設為0 ,  是 0
: 你要使用上一個非零的值。 用DECODE inline 就可以完成。
: 另外, 黑色箭頭是涉及 A B 類別的重設, 您自己簡單處理一下
: see attached img




--
※ 修改:·nmamtf 於 Nov  7 11:48:44 2019 修改本文·[FROM: 152.]
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 152.]

 
nmamtf
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 12 ]

发信人: nmamtf (nmamtf), 信区: Database
标  题: Re: 出个更难的sql题
发信站: BBS 未名空间站 (Thu Nov  7 12:00:44 2019, 美东)

This one separated product value.

You can keep working on it. I don't have much time to complete all of them.

SELECT PRODUCT,
       SEQ,
       P1,
       P2,
       P1_FLAG,
       P2_FLAG,
       PRE_ROW_P1,
       PRE_ROW_P2,
       PRE_ROW_P1_FLAG,
       PRE_ROW_P2_FLAG,
       PRODUCT_FLAG,
      
       DECODE(PRODUCT_FLAG, 1, P1, DECODE (P1_FLAG,1, P1,
           DECODE (PRE_ROW_P1_FLAG,
                   1, PRE_ROW_P1,
                   LAG (PRE_ROW_P1) OVER (ORDER BY PRODUCT, SEQ)))) AS NEW_
P1
  FROM (  SELECT PRODUCT,
                 SEQ,
                 P1,
                 P2,
                 DECODE (P1,  NULL, -1,  0, -1,  1) AS P1_FLAG,            
  
                 DECODE (P2,  NULL, -1,  0, -1,  1)AS P2_FLAG,             
 
                 LAG (P1) OVER (ORDER BY PRODUCT, SEQ) AS PRE_ROW_P1,
                 LAG (P2) OVER (ORDER BY PRODUCT, SEQ) AS PRE_ROW_P2,
                 DECODE (LAG (P1) OVER (ORDER BY PRODUCT, SEQ), 0, -1, 1) AS
PRE_ROW_P1_FLAG,
                 DECODE (LAG (P2) OVER (ORDER BY PRODUCT, SEQ), 0, -1, 1) AS
PRE_ROW_P2_FLAG,
                 DECODE (LAG (PRODUCT) OVER (ORDER BY PRODUCT, SEQ), PRODUCT
, 0, 1) AS PRODUCT_FLAG
            FROM THEMATRIXDATA
        ORDER BY PRODUCT, SEQ);
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 152.]

 
TheMatrix
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 13 ]

发信人: TheMatrix (TheMatrix), 信区: Database
标  题: Re: 出个更难的sql题
发信站: BBS 未名空间站 (Thu Nov  7 12:34:34 2019, 美东)

我出题之前就已经做出来了。我的代码比你的简练的多,而且是百分之百的标准SQL,
而且是one single SQL statement。

你这个答案的正确性我现在只能目测,我有所怀疑。因为one single lag function应
该是解决不了问题的。

【 在 nmamtf (nmamtf) 的大作中提到: 】
: This one separated product value.
: You can keep working on it. I don't have much time to complete all of them.
: SELECT PRODUCT,
:        SEQ,
:        P1,
:        P2,
:        P1_FLAG,
:        P2_FLAG,
:        PRE_ROW_P1,
:        PRE_ROW_P2,
: ...................




--
☆ 发自 iPhone 买买提 1.24.11
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2607:fb90:b68d:]

 
nmamtf
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 14 ]

发信人: nmamtf (nmamtf), 信区: Database
标  题: Re: 出个更难的sql题
发信站: BBS 未名空间站 (Thu Nov  7 13:23:08 2019, 美东)

我寫的複雜時怕你看不懂, 卻不知道你這是閒著沒事幹逗大家玩?!

【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: 我出题之前就已经做出来了。我的代码比你的简练的多,而且是百分之百的标准SQL,
: 而且是one single SQL statement。
: 你这个答案的正确性我现在只能目测,我有所怀疑。因为one single lag function应
: 该是解决不了问题的。



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 152.]

 
TheMatrix
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 15 ]

发信人: TheMatrix (TheMatrix), 信区: Database
标  题: Re: 出个更难的sql题
发信站: BBS 未名空间站 (Thu Nov  7 13:29:19 2019, 美东)

我验证了,你的不对。你的答案只填了连续的两个空白,如果空白超过两个,你的还是
空白。

空白数目不定,任何固定个数的用法都不能解决问题。

我手上没有oracle,但是decode function可以用case when改写。附图是你最后一个
sql的改写和结果。

【 在 nmamtf (nmamtf) 的大作中提到: 】
: This one separated product value.
: You can keep working on it. I don't have much time to complete all of them.
: SELECT PRODUCT,
:        SEQ,
:        P1,
:        P2,
:        P1_FLAG,
:        P2_FLAG,
:        PRE_ROW_P1,
:        PRE_ROW_P2,
: ...................




--
☆ 发自 iPhone 买买提 1.24.11
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2607:fb90:b68d:]


此主题相关图片如下:

[删除]

此主题相关图片如下:
[删除]

 
TheMatrix
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 16 ]

发信人: TheMatrix (TheMatrix), 信区: Database
标  题: Re: 出个更难的sql题
发信站: BBS 未名空间站 (Thu Nov  7 13:33:05 2019, 美东)

这怎么是逗大家玩?程序员切磋算法和语言,以码会友,有毛病吗?

【 在 nmamtf (nmamtf) 的大作中提到: 】
: 我寫的複雜時怕你看不懂, 卻不知道你這是閒著沒事幹逗大家玩?!




--
☆ 发自 iPhone 买买提 1.24.11
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2607:fb90:b68d:]

 
nmamtf
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 17 ]

发信人: nmamtf (nmamtf), 信区: Database
标  题: Re: 出个更难的sql题
发信站: BBS 未名空间站 (Thu Nov  7 13:52:20 2019, 美东)

呵呵, 沒毛病, 是我自己賤。

其實, 更簡單, 而且靈活的方法可以不用嵌套表 AND LAG, 一步就得到理想的值。
因為在數據量超大的情況下, LAG 會造成速度下降的問題。嵌套的 LAG 會問題更大。
可惜你不是實際需要, 就沒必要深入說了。

【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: 这怎么是逗大家玩?程序员切磋算法和语言,以码会友,有毛病吗?






--
※ 修改:·nmamtf 於 Nov  7 14:41:45 2019 修改本文·[FROM: 152.]
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 152.]

 
nmamtf
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 18 ]

发信人: nmamtf (nmamtf), 信区: Database
标  题: Re: 出个更难的sql题
发信站: BBS 未名空间站 (Thu Nov  7 14:53:38 2019, 美东)


【 在 TheMatrix (TheMatrix) 的大作中提到: 】
: 我验证了,你的不对。你的答案只填了连续的两个空白,如果空白超过两个,你的还
是空白。

你這人不好好看帖子。 我樓上已經告訴你:

『最後一步你要自己完成, 呵呵。 那就是, 要是 NEW_P1 是 NULL就設為0 ,  是 0
你要使用上一個非零的值。 用DECODE inline 就可以完成。』

並附上圖, 用箭頭標注出你需要自己完成的部分。

: 空白数目不定,任何固定个数的用法都不能解决问题。
: 我手上没有oracle,但是decode function可以用case when改写。附图是你最后一个
: sql的改写和结果。



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 152.]

 
TheMatrix
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 19 ]

发信人: TheMatrix (TheMatrix), 信区: Database
标  题: Re: 出个更难的sql题
发信站: BBS 未名空间站 (Thu Nov  7 15:09:19 2019, 美东)

哦。那我也不好意思啊。我原贴说的是出个题大家玩一下,并没有说请人帮忙,不过我
话说的太软,可能给你的印象是求人帮忙,看到你第一个回贴我估计你是这么想的,但
是我也没澄清,不过你后来说话有点居高临下了,所以我就没客气。这里有误会。

我贴我的算法吧。

用的是两个row_number函数相减的方法,得到内容的grouping,同时把每一个grouping
中第一个值得到,用的是lead desc,然后再用first_value把这个值spread出去。

【 在 nmamtf (nmamtf) 的大作中提到: 】
: 呵呵, 沒毛病, 是我自己賤。
: 其實, 更簡單, 而且靈活的方法可以不用嵌套表 AND LAG, 一步就得到理想的值

: 因為在數據量超大的情況下, LAG 會造成速度下降的問題。嵌套的 LAG 會問題更大。
: 可惜你不是實際需要, 就沒必要深入說了。




--
☆ 发自 iPhone 买买提 1.24.11
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2607:fb90:b68d:]


此主题相关图片如下:

[删除]

 
TheMatrix
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 20 ]

发信人: TheMatrix (TheMatrix), 信区: Database
标  题: Re: 出个更难的sql题
发信站: BBS 未名空间站 (Thu Nov  7 15:18:53 2019, 美东)

你这样说我觉得不行。decode inline完成。怎么完成?空白的数目不定,这里必须有
一个相当于循环的东西。你完成一下看看嘛。

【 在 nmamtf (nmamtf) 的大作中提到: 】
: 是空白。
: 你這人不好好看帖子。 我樓上已經告訴你:
: 『最後一步你要自己完成, 呵呵。 那就是, 要是 NEW_P1 是 NULL就設為0 ,  是
0
:  你要使用上一個非零的值。 用DECODE inline 就可以完成。』
: 並附上圖, 用箭頭標注出你需要自己完成的部分。




--
☆ 发自 iPhone 买买提 1.24.11
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2607:fb90:b68d:]

[首页] [上页][下页][末页] [分页:1 2 ]
[快速返回] [ 进入数据库讨论区] [返回顶部]
回复文章
标题:
内 容:

未名交友
将您的链接放在这儿

友情链接


 

Site Map - Contact Us - Terms and Conditions - Privacy Policy

版权所有,未名空间(mitbbs.com),since 1996