2013-10-28 237 views
0

我有以下代碼:減去日期

SELECT t2.Owner, a.accNumber, a.Rest, dateadd(day,1,MIN(a.Date)), MIN(b.Date) 
    FROM t1 a 
    LEFT JOIN t1 b ON a.accNumber=b.accNumber 
    LEFT JOIN t1 ON a.accountId = t2.accountId 
    WHERE a.Date<b.Date 
    AND a.Rest<>0 
    AND a.accNumber=b.accNumber 
    GROUP BY a.accNumber, a.Rest, t2.Owner 
    ORDER BY t2.Owner 

我想減去日期在5和第4列(MIN(b.Date) - dateadd(day,1,MIN(a.Date)))並把它作爲第6列,但簡單DATEDIFF(day, dateadd(day,1,MIN(a.Date)), MIN(b.Date))不起作用,因爲LEFT JOIN的。

enter image description here

這是應該的樣子。與當前的代碼,我只能看到第5列,我要見第6列要麼

enter image description here

這是怎麼看起來像當我添加DATEDIFF(day, 4, 5)到SELECT語句

+0

表t2從哪裏來? – Twinkles

+0

因此,如果沒有b.date值,您希望在日期差異列中顯示什麼 – Sparky

+0

t2是與檢索「所有者」的位置不同的表格 –

回答

0

我不是100%確定我明白這個問題,但我可以在短期內給你一個解決方案。這將使您繼續進行開發,並且您可以在以後找出問題所在。

假設您的發佈查詢正常工作,正如您的意見所述,您可以將其視爲表格。

您的查詢

SELECT t2.Owner, a.accNumber, a.Rest, dateadd(day,1,MIN(a.Date)), MIN(b.Date) 
    FROM t1 a 
    LEFT JOIN t1 b ON a.accNumber=b.accNumber 
    LEFT JOIN t1 ON a.accountId = t2.accountId 
    WHERE a.Date<b.Date 
    AND a.Rest<>0 
    AND a.accNumber=b.accNumber 
    GROUP BY a.accNumber, a.Rest, t2.Owner 
    ORDER BY t2.Owner 

名稱的列,而在另一個SELECT語句包裹。沿着這些線應該工作。

SELECT Owner, accNumber, Rest, Good_name, Another_good_name, 
     Another_good_name - Good_name Yet_a_third_good_name 
FROM 
    (SELECT t2.Owner, a.accNumber, a.Rest, 
      dateadd(day,1,MIN(a.Date)) Good_name, MIN(b.Date) Another_good_name 
    FROM t1 a 
    LEFT JOIN t1 b ON a.accNumber=b.accNumber 
    LEFT JOIN t1 ON a.accountId = t2.accountId 
    WHERE a.Date<b.Date 
     AND a.Rest<>0 
     AND a.accNumber=b.accNumber 
    GROUP BY a.accNumber, a.Rest, t2.Owner 
    ORDER BY t2.Owner) AS Good_table_name 

另一種方法是從您的第一個查詢中創建一個視圖,然後從視圖中進行選擇。

由於您的示例中沒有任何NULL,並且您沒有提及它們,所以我假設您知道如何處理NULL。