2016-12-16 2 views
0

Я пытаюсь запустить запрос, который находит клиентов, которые ничего не купили за последние шесть лет. Я не уверен, использовать ли цикл или использовать ключевое слово BETWEEN.SQL - нет продаж за последние x лет

Если вам нужно увидеть таблицы, пожалуйста, дайте мне знать, спасибо.

-- Find out the information of the customers who have not purchased anything in the 
--last couple of years. Give the number of years (e.g., 1,2,3,4). 

create procedure purchaseYear(@year int) 
AS 

select * 
from customer 
where CID IN(
select CID from item 
where ItemNum IN (
select ItemNum from sale 
where year(Comp_Date) = Between year(getdate()) AND @year)) 
+1

как вы определяете покупку клиента? –

+0

Добавить структуру ваших таблиц – Dekel

ответ

0

Что-то вроде этого

Declare @Year int = 7 

Select A.* 
From Customer A 
Join (Select CID 
     From Item 
     Group By CID 
     Having max(Comp_Date)<=DateAdd(YY,[email protected],cast(GetDate() as date)) 
    ) B 
    on A.CID=B.CID 
0

Смотрите, если это работает.

SELECT d.cid, 
     year(getdate())-year(lastDate) as years 
FROM 
    (SELECT c.cid, 
      max(s.comp_date) AS lastDate 
    FROM sale s 
    INNER JOIN item i ON s.itemnum = i.itemnum 
    INNER JOIN customer c ON c.cid = i.cid 
    GROUP BY c.cid 
    UNION SELECT c.cid, 
       max(NULL) AS lastDate 
    FROM customer c 
    LEFT OUTER JOIN item i ON c.cid = i.cid 
    WHERE i.cid IS NULL 
    GROUP BY c.cid) d 
0

Если перефразировать вопрос, как «Я хочу, чтобы найти компании, чьи самые последние покупки более чем х лет назад» ответ должен быть ясным.

; with companyAndLastPurchaseAge as (
    Select companyId, max(DateDiff(y, saledate, getdate())) YearsAgo 
    From sale 
    Group by companyId 
) 
select cid.* 
From cid 
    Left join companyAndLastPurchaseYear cp 
     On cp.CompanyId = cid.companyId and yearsago < x 
Where cp.companyid is null; 
0
create procedure purchaseYear(@year int) 
    AS 


    select * 
    from customer as c 
    where not exists(
     Select item.CID from sale 
     inner join item on item.ItemNum=sale.ItemNum 
     where item.CID=c.CID and datediff(year,Comp_Date,GETDATE()) Between 0 AND @year 
    ) 
Смежные вопросы