簡體   English   中英

SQL查詢僅返回本月添加的項目

[英]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.

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