table如下
日期 收入 支出
2000/3/1 50 30
2000/3/2 45 60
2000/3/5 60 10
能否用select語句得出以下結果
日期 收入 支出 餘額
2000/3/1 50 30 20
2000/3/2 45 60 5
2000/3/3 0 0 5
2000/3/4 0 0 5
2000/3/5 60 10 55
這是乙個網上廣為流傳的題目,以前曾經有人說這是微軟的試題,這個不去管了,我們先看oracle的解
816 以上版本使用analistic function 的簡化版答案
sql> select * from test;
a b c
---------- ---------- ----------
5 5 5
2 2 1
4 4 5
6 1 3
8 4 4
sql> select tt2.tta, tt2.ttb, tt2.ttc, sum(tt2.ttb - tt2.ttc) over(order by tt2.tta) youwant
2 from
3 (4 select t1.aa tta,decode(t2.a,null,0,t2.b) ttb,decode(t2.a,null,0,t2.c) ttc
5 from
6 (select ((select min(a) from test) + rownum - 1) aa from all_objects
7 where rownum <= (select max(a) - min(a) +1 from test)) t1,
8 test t2
9 where t1.aa = t2.a(+)
10 ) tt2;
tta ttb ttc youwant
---------- ---------- ---------- ----------
2 2 1 1
3 0 0 1
4 4 5 0
5 5 5 0
6 1 3 -2
7 0 0 -2
8 4 4 -2
已選擇7行。
sql>
其實這類問題都是月度微通解的,主要就是構造連續的數字集合,如果all_objects記錄數不足完全可以做個自連線。比如曾經有求某段時間內的工作日天數,這類問題,也是如此解法。
一道微軟的Mini Test筆試題 二
一道微軟的mini test筆試題 二 題目要求基本如下 請編寫乙個控制台程式,要求使用者可以輸入任意組條件,定義兩個字母之間的大小關係。程式可以通過已輸入的條件,推斷出給定的兩個字母之間的大小關係。例如 使用者輸入 a b 使用者輸入 b c 使用者輸入 a?c 程式顯示 a c 使用者輸入 c ...
一道曾經微軟的面試題
題目描述 有10億個至多9位 號碼,找出這些 號碼不重複的個數,記憶體之給你256m的空間 分析 這相當於10億個int型整數,每個int佔四個位元組,40億個位元組,也就說儲存這些 號碼需要4g的記憶體空間,所以必須對這些 號碼進行壓縮 解決方法 可以用乙個位來表示這個 號碼是否存在,也就是說需要...
一道微軟面試題
聽說這是一道微軟面試題,今天無意中在網上看到。幾個月前我同學面試時遇到過乙個類似的題目,幾乎是原題。當時在群裡面討論過這個問題,答案不一。也沒有人知道最後的正確答案。下面是原題,帶答案解析。小明和小強都是張老師的學生,張老師的生日是m月n日,2人都知道張老師的生日是下列10組中的一天,張老師把m值告...