2016-09-13 35 views
1

讓我來舉個簡單的例子來說明我的意思。如何從表格中選擇日期範圍內的值集合

比方說,我們有一個名爲表佔的列存款d月,並d年。 選擇總和(存款)將獲得存款列下的值的總和全部值。 什麼是SQL查詢來獲取存款總和,也就是說,週期2016年7月

+1

'SELECT SUM(存款)作爲Deposits_Sum WHERE CONVERT(INT,d年+ d月)<201607' - 根據年份和月份是如何存儲,你必須更改'201607'部分。我的例子假定年份存儲爲4位數字,月份存儲爲2位數字。 – Santi

+0

十月以下的月份存儲爲單個數字,例如7不是07,那麼20167是否正確? – bodesam

+0

是的,應該工作! – Santi

回答

2

這裏是另一種方式:

SELECT SUM(Deposits) 
FROM Accounts 
WHERE (dYear = 2016 AND dMonth < 7) 
OR  dYear < 2016 
+0

謝謝。不錯,但它不會比2016年更早捕獲 – bodesam

+0

抱歉。或者dYear <2016應該照顧到這一點。 – bodesam

+0

@bodesam Yup,正好。 –

0

假設d月裏含有一種重要約會時一樣,你可以做到這一點與在那裏CLASE

Select sum(deposits) as Sum from accounts where dmonth < 07-01-16 00:00:000.000 

另請參見:

SQL sum with condition

+0

我假設'dmonth'不包含完整的日期,因爲他有一個單獨的'染色體'列。再一次,只是一個假設。 – Santi

+0

好的一點泰勒,我們一定需要知道dmonth的價值,以及他們想要走多遠,只是今年,永遠等方面更清晰一點。 – Shark50521

+0

不僅僅是今年。週期是任意的。 – bodesam

1

取決於你如何和dyeardmonth或存儲,你可能需要做這樣的事情:

SELECT SUM(deposits) as Deposits_Sum WHERE CONVERT(int, dyear+dmonth) < 201607

我在這裏做的是結合你的dyeardmonth創造價值這是按時間順序排序。然後將其轉換爲一個整數用於比較目的。

使用此邏輯,我們可以通過在WHERE子句中執行< 201607來找到此值小於2016年7月的所有記錄。如果您的年份未保存爲yyyy和/或您的月份不是MM,則最後一部分可能需要進行一些修改。