2014-01-02 3 views
0

Я пытаюсь переписать следующий запрос, чтобы дать мне лучших исполнителей на неделю, а не на день. Поскольку моя неделя проходит с пятницы по воскресенье, мне нужно сказать sql, что если дата равна x, то на неделе она находится в y.Заявление о ситуации в рамках предложения Where

Вот мой работает ежедневно запрос:

SELECT u.UserName, COUNT t.Policy AS Policies, SUM t.Fee AS Premium 
FROM Users u INNER JOIN PolicyInfo t ON u.UserID = t.UserID 
WHERE t.Date >= convert(date,getdate())) 
GROUP BY u.UserName 
ORDER BY Policies desc, Premium desc 

Вот мой нерабочими еженедельный запрос:

SELECT u.UserName, COUNT t.Policy AS Policies, SUM t.Fee AS Premium 
FROM Users u INNER JOIN PolicyInfo t ON u.UserID = t.UserID 
WHERE t.Date >= convert(date,getdate())) 
AND CASE DATEPART(WEEKDAY, t.Date) 
    WHEN 1 THEN cast (convert(varchar (8), DATEADD(d,5,[t.Date]),112) as date) 
    WHEN 2 THEN cast (convert(varchar (8), DATEADD(d,4,[t.Date]),112) as date) 
    WHEN 3 THEN cast (convert(varchar (8), DATEADD(d,3,[t.Date]),112) as date) 
    WHEN 4 THEN cast (convert(varchar (8), DATEADD(d,2,[t.Date]),112) as date) 
    WHEN 5 THEN cast (convert(varchar (8), DATEADD(d,1,[t.Date]),112) as date) 
    WHEN 6 THEN cast (convert(varchar (8), DATEADD(d,0,[t.Date]),112) as date) 
    WHEN 7 THEN cast (convert(varchar (8), DATEADD(d,6,[t.Date]),112) as date) 

GROUP BY u.UserName 
ORDER BY Policies desc, Premium desc 
+4

вы не сказали случай заявлению 'end' может быть причиной, почему –

+0

вы ищете сверху исполнители ** этой ** недели? –

+0

Какие СУБД вы используете? SQL Server? – PinnyM

ответ

0

Простой расчет, чтобы получить первый день текущей недели будет:

SELECT DATEADD(DAY, 1-DATEPART(WEEKDAY, CURRENT_TIMESTAMP), CURRENT_TIMESTAMP) 

Поскольку вам нужно будет определить самую последнюю пятницу, для которой потребуется немного подстройки:

SELECT DATEADD(DAY, (12-DATEPART(WEEKDAY, CURRENT_TIMESTAMP) % 7) - 6, CURRENT_TIMESTAMP) 

Теперь, когда у вас есть это, Вы можете добавить это к GROUP BY предложения:

SELECT u.UserName, t.weekStarting, COUNT(t.Policy) AS Policies, SUM(t.Fee) AS Premium 
FROM Users u 
INNER JOIN (
    SELECT *, SELECT DATEADD(DAY, (12-DATEPART(WEEKDAY, Date) % 7) - 6, Date) weekStarting 
    FROM PolicyInfo) t ON u.UserID = t.UserID 
WHERE t.Date >= convert(date,getdate()) 
GROUP BY u.UserName, t.weekStarting 
ORDER BY Policies desc, Premium desc 
+0

Когда я пытаюсь использовать вышеуказанный запрос, используя предложение Group By, я получаю следующие ошибки: Неправильный синтаксис рядом с ключом SELECT и неправильный синтаксис рядом с ')' – user3154648

+0

@ user3154648: У меня был дополнительный «)», исправлено. Кроме того, какие СУБД вы используете (например, MySQL, Access, SQL Server)? – PinnyM

Смежные вопросы