簡體   English   中英

SQL Server:從表中選擇*,其中日期減去一年

[英]SQL Server : select * from table where date minus one year

如何選擇第一年?

這是我的代碼:

select 
    a.* 
from 
    (select 
         met_men, kli_kod, pre_kod, galutinis, savik_group, marza, 
         KLR_KOD, KLI_POZ1, KLI_POZ2, KLI_POZ3, KLG_KOD, PRE_RUS, 
         PRE_POZ1, PRE_POZ2, PRE_POZ3, PRE_POZ4, PRE_POZ5, PRE_POZ6, 
         did_dat, savi_suproc, marza_suproc, pre_ska dbo.SVF_View_10) AS a 
left outer join 
    (select 
         pre_kod, kli_kod, met_men, did_dat 
     from 
         dbo.SVF_View_10_sum 
     where 
         dateadd(year, -1, 'did_dat')) as b on a.kli_kod = b.kli_kod 
                                            and a.pre_kod = b.pre_kod 
                                            and a.did_dat = b.did_dat

此錯誤發生在where DATEADD(year, -1, 'did_dat')) as b

消息 4145,級別 15,狀態 1,第 6 行
在預期條件的上下文中指定的非布爾類型的表達式,靠近 ')'。

請幫我

所需數據:訂單日期、ID、數量、訂單日期-1 年、數量。 有必要比較今年和去年的銷售數量

您在單引號 dateadd(year, -1, 'did_dat') 中給出列名,這里不需要更改為 dateadd(year, -1, did_dat) 並且當您使用 where 子句時需要在 where 子句中進行比較操作。

所以變成了

where did_dat <= dateadd(year, -1, did_dat)

但這沒有任何意義,因為查詢應該在上一年針對當前日期執行,例如

where did_dat <= dateadd(year, -1, GETDATE())

我懷疑你想要的是:

select . . .
from dbo.SVF_View_10 v left outer join
     dbo.SVF_View_10_sum vs
     on v.kli_kod = vs.kli_kod and a.pre_kod = b.pre_kod and
        v.did_dat = dateadd(year, -1, vs.did_dat);

筆記:

  • 此查詢不需要子查詢。 我認為它們只會使查詢更難編寫和閱讀。
  • 使用表名縮寫形式的表別名。
  • 您在where子句中有一個日期計算,而不是一個布爾表達式。 那是導致你的錯誤。
  • 日期表達式的第三個參數是一個字符串 這將是你的下一個錯誤。 字符串不引用列名。
  • 我推測您希望在該日期表達式上連接表。

嘗試這個 :-

SELECT a.*
    FROM
    (
        SELECT met_men,kli_kod,pre_kod,galutinis,savik_group,marza,KLR_KOD,LI_POZ1,
               KLI_POZ2,KLI_POZ3,KLG_KOD,PRE_RUS,PRE_POZ1,PRE_POZ2,PRE_POZ3,PRE_POZ4,
               PRE_POZ5,PRE_POZ6,did_dat,savi_suproc,marza_suproc,pre_ska
        FROM SVF_View_10_sum
    ) AS a
        LEFT OUTER JOIN
        (
            SELECT pre_kod,kli_kod,met_men,did_dat
            FROM dbo.SVF_View_10_sum
            WHERE did_dat = DATEADD(YEAR, -1, did_dat)
        ) AS b
            ON a.kli_kod = b.kli_kod AND a.pre_kod = b.pre_kod AND a.did_dat = b.did_dat;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM