2015-03-19 58 views
3

我想忽略生產的第一天是否有零值。如何忽略查詢結果中的第一個零位

SELECT D_DATE, PRODUCE FROM PRODUCTION 

數據集

Date   Produce 
1/1/2015  0 
1/2/2015  0 
1/3/2015  0 
1/4/2015  6 
1/5/2015  5 
1/6/2015  2 
1/7/2015  0 
1/8/2015  1 
1/9/2015  1 

前三天是零,我想在我的結果忽略,但第7天不應該被忽視

所需的結果

Date   Produce 
1/4/2015  6 
1/5/2015  5 
1/6/2015  2 
1/7/2015  0 
1/8/2015  1 
1/9/2015  1 

回答

3

爲簡單起見我假定有至少一天以產生> 0

SELECT d_date, produce 
FROM production 
WHERE 
    d_date >= (
     SELECT MIN(d_date) 
     FROM production 
     WHERE 
      produce != 0 
    ) 
; 
+0

這不起作用,我仍然在數據集上獲得0值。 – szakwani 2015-03-19 07:10:51

+0

@szakwani第7天?你之前說過「不應忽視」。解釋您的樣本數據和預期結果。 – Matt 2015-03-19 07:13:59

+0

我的意思是我仍然在數據集上獲得最初的0值。 – szakwani 2015-03-19 07:16:55

-2

假設你的日期是在DATETIME,這會幫助你嗎?

SELECT D_DATE, PRODUCE 
FROM PRODUCTION 
where Date >= (select TOP 1 Date from PRODUCTION where PRODUCE > 0 Order by DATE) 
+0

如標籤中所述,它是一個oracle數據庫。 – szakwani 2015-03-19 05:43:11

+0

可食答案是: SELECT d_date,產生 從生產 WHERE d_date> =( 從PRODUCTION 選擇MIN(d_date)其中PRODUCE> 0 ); – Hybridzz 2015-03-19 09:56:21

0

試試這個

SELECT date, 
     produce 
FROM 
(
SELECT date, 
     produce, 
     row_number() over (order by date) r1, 
     row_number() over (order by produce, date) r2 
FROM production 
) A 
WHERE r1 != r2 
+0

結果並不像預期的那樣。導致重複,每個記錄爲零。 – szakwani 2015-03-19 05:51:01

+0

我對您提供的數據和完美的工作進行了測試。你測試了哪些數據以及失敗的地方。 – vijay 2015-03-19 05:57:20

+0

你能分享你的小提琴嗎? – szakwani 2015-03-19 07:13:34

-1

使用相關子查詢。

SELECT Date, Produce, 
ROW_NUMBER() OVER (ORDER BY DATE) RN 
INTO #Temp 
FROM tbl 

SELECT t.Date, t.Produce FROM #Temp t 
WHERE 
EXISTS(
       SELECT 1 FROM #Temp t1 
        WHERE t1.rn < t.rn 
        AND t1.PRODUCE !=0) 
OR T.Produce != 0 

Fiddle here

+0

@szakwani - 用小提琴更新了我的答案 – SouravA 2015-03-19 06:45:19

+0

它在SQLSERVER中,我用oracle的朋友 – szakwani 2015-03-19 07:08:15

+0

是的,我知道。出於某種原因,我無法在Oracle上爲小提琴創建表腳本。因此我使用了MS-SQL Server。當你在你的環境中運行它時,是否會拋出任何錯誤? – SouravA 2015-03-19 10:13:50

1

可以使用SUM作爲分析函數來計算產生的累積和和過濾那些大於零。

select d_date, produce 
from (
     select 
     d_date, 
     produce, 
     sum(produce) over (order by d_date) cuml_produce 
     from production 
) 
where cuml_produce > 0 
order by d_date; 
+0

你爲什麼要累積?這是行不通的。 – szakwani 2015-03-19 07:13:08

+1

是的,它確實有效。你甚至嘗試過嗎?證明:http://sqlfiddle.com/#!4/9a145/3 – 2015-03-19 07:20:05

相關問題