[英]Sql Query to return only items added this month
我正在尋找一個僅返回當月新商品的查詢。 即,如果該項目在上個月,則排除。
我的桌子看起來像這樣
Date fruit buyer
2014-04-01 Apple someone1
2014-04-01 Banana someone2
2014-05-01 Apple someone2
2014-05-01 Banana someone2
2014-05-01 Pear someone1
因此,在上述情況下,我想要一個查詢,如果運行時間為2014-05-01,則只會返回蘋果和梨,因為買方或水果是不同的。 但不是香蕉,因為確切的記錄是在上個月。
我試圖對本身即使用不存在的查詢。
select Date, Fruit, buyer
from table
where date = 2014-05-01 and not exists(
select Date, Fruit, buyer
from table
where date = 2014-04-01)
但這似乎會持續很長時間,並且不會返回正確的結果。
我也知道,一種解決方案是使買方正常化,但目前尚不可行。 (長期而言)
這是在MSSQL上。
提前致謝
對於上一個,您需要嘗試類似的操作,我很抱歉,但是想法是相同的,您可以訪問此鏈接以獲取更多信息。
http://technet.microsoft.com/zh-cn/library/bb264565(v=sql.90).aspx
SELECT EmployeeID, FirstName, LastName, HireDate, City
FROM Employees
WHERE (HireDate >= '1-june-1992') AND (HireDate <= '15-december-1993')
我解決了
select Date, Fruit, buyer
from table e
where date = 2014-05-01
and not exists(
select Date, Fruit, buyer
from table d
where date = 2014-04-01
and e.buyer = d.buyer
and e.fuit = d.fruit)
您需要從上個月中排除買家
SELECT DATE,FRUIT, BUYER FROM TABLE
WHERE FRUIT IN (
(
Select Fruit
from
(
SELECT FRUIT,BUYER FROM TABLE WHERE DATE = '2014-05-01'
EXCEPT
SELECT FRUIT,BUYER FROM TABLE WHERE DATE = '2014-04-01'
) T1
)
)
AND DATE = '2014-05-01'
我使用內部聯接來創建查詢,嘗試下面的查詢
數據:
xDate fruit buyer
----------------------------
2014-04-01 Apple someone1
2014-04-01 Banana someone2
2014-05-01 Apple someone2
2014-05-01 Banana someone2
查詢:
select
convert(nvarchar(10),a.xdate,110),a.fruit, a.buyer
from
@temp a
inner join
(
select
b.fruit, b.buyer,b.fruit + ' ' + b.buyer as 'xField', count(*) as total
from @temp b
group by b.fruit, b.buyer, b.fruit + ' ' + b.buyer
having
count(*) = 1
) c on a.fruit = c.fruit and a.buyer = c.buyer
where
a.xDate < dateadd(day,1,'20140630')
--convert(nvarchar(6),a.xdate,112) = '201405'
結果:
fruit buyer
----------------------------
05-01-2014 Apple someone2
05-01-2014 Pear someone1
注意:如果需要在where子句中添加Year
DATEPART(Year, xdate) = 2014
DATEPART(Month,xdate) = 5
更新:
如果您不想使用datepart函數,則可以在where子句下面使用:
(格式字符串“ YYYYMM”)
convert(nvarchar(6),a.xdate,112) = '201405'
如果我們將這2條記錄添加到數據中:
2014-03-05 Apple someone2
2014-03-10 Apple someone1
結果數據中僅出現梨
05-01-2014 Pear someone1
第二次更新
為了防止NON-SARGable查詢,where子句更改為:
a.xDate < dateadd(day,1,'20140630')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.