2014-01-21 4 views
0

Я пытаюсь написать запрос, чтобы узнать, сколько у меня клиентов за определенный период времени. Эти периоды уже установлены в БД, и я просто начисляю сумму на клиентов в этот период.Сумма, не возвращающая точные значения

Использование:

select distinct numguests, checknum 
from guest_check_hist 
where revenuecenterid in ('146708') and openfixedperiod = '89' 
    and openbusinessdate between dateAdd(day, -2,getDate()) and dateAdd(day, -1,getDate())` 

Я считаю, что у меня было 7 заказов на общую сумму 10 клиентов.

Я затем запустить:

Select Distinct MENU_ITEM_FIXED_PERIOD_TOTAL.businessDate as 'Effective Date', 
    sum(H.guests) as guests, menu_item_fixed_period_total.fixedperiod, 
    menu_item_fixed_period_total.revenuecenterid 
FROM MENU_ITEM_FIXED_PERIOD_TOTAL 
inner JOIN (
    select distinct checknum, numguests as guests, openbusinessdate, revenuecenterid, openfixedperiod 
    from guest_check_hist 
    where openbusinessdate between dateAdd(day, -2,getDate()) and dateAdd(day, -1,getDate()) 
) H ON Menu_item_fixed_period_total.businessdate = H.openbusinessdate and menu_item_fixed_period_total.revenuecenterid = H.revenuecenterid and H.openfixedperiod = menu_item_fixed_period_total.fixedperiod 
where menu_item_fixed_period_total.revenuecenterid in ('146708') 
    and menu_item_fixed_period_total.businessdate between dateAdd(day, -2,getDate()) and 
    dateAdd(day, -1,getDate()) and fixedperiod = '89' 
group by fixedperiod, businessdate, menu_item_fixed_period_total.revenuecenterid 
order by fixedperiod` 

и обнаружили, что у меня было 200 гостей.

Очевидно, что это не так.

Numguests имеет тип данных Int. Можете ли вы указать мне в правильном направлении, где моя ошибка?

Фактические данные:

Индивидуальные заказы:

  • numguets checknum
  • 0, 2917
  • 1, 2918
  • 1, 2921
  • 1, 2922
  • 2 , 2919
  • 2, 2923
  • 3, 2920

подвел Результаты:

  • [Дата] Гости fixedperiod revenuecenterid
  • 2014-1-20, 200, 89, 146708

Ожидаемые результаты:

  • [Дата] Гости fixedperiod revenuecenterid
  • 2014-1-20, 10, 89, 146708
+0

Почему у вас есть отчетливые и групповые?Не могли бы вы показать некоторые данные образца и желаемые результаты? Я почти ожидаю большего количества строк, чем вы, просто из-за чрезмерного использования разных. –

+0

Отличительная особенность была просто перенесена из моего устранения неполадок, чтобы определить конкретные заказы, так как без них они появляются несколько раз. Группа из-за суммы. – user3220005

+0

О, пожалуйста, не отправляйте кучу данных в комментарии. Либо добавьте образцы данных в вопрос, либо подготовьте их правильно в [SQL Fiddle] (http://sqlfiddle.com/#!3). –

ответ

0

Я решил это путем определения, что все данные мне нужно было на сумму была в guest_check_hist и что сумма была как-то удвоение суммы.

0

ли вы попробовать положить фильтр в скобках во избежание путаницы.

Я думаю, что «и fixedperiod = '89» вызывает больше записей. Положите это утверждение выше.

+0

Фиксированный период уменьшает количество записей. Система имеет 96 фиксированных периодов в день с шагом 15 минут. Чтобы уменьшить объем данных, которые я должен был объяснить, я выбрал определенный период, который был достаточно мал для использования. У многих других есть 50 гостей по 70 заказам. – user3220005

0

Я думаю, вы сделали свой запрос более сложным, чем это должно быть. Попробуйте начать:

DECLARE @date DATE = '2014-01-20'; 

SELECT 
    [Effective Date] = m.businessdate, 
    guests = SUM(h.numguests), 
    h.fixedperiod, 
    h.revenuecenterid 
FROM 
    dbo.MENU_ITEM_FIXED_PERIOD_TOTAL AS m 
INNER JOIN dbo.guest_check_hist AS h 
    ON h.openbusinessdate >= m.businessdate 
    AND h.openbusinessdate < DATEADD(DAY, 1, m.businessdate) 
    AND h.fixedperiod = m.fixedperiod 
    AND h.revenuecenterid = m.revenuecenterid 
WHERE m.businessdate = @date 
GROUP BY m.businessdate, h.fixedperiod, h.revenuecenterid 
ORDER BY h.fixedperiod; 

SQL Fiddle demo

+0

Это чище, но я получаю точные результаты. – user3220005

+0

@ user3220005 Затем вам нужно показать лучшие данные. [Откорректируйте скрипт, который я создал] (http://sqlfiddle.com/#!6/9af30/2), чтобы в таблицах были данные, демонстрирующие проблему. Я не могу исправить результаты запроса, которые отличаются от тех, которые вы получаете, используя только те данные, которые я вижу, когда ваши данные явно отличаются от того, что вы разместили в вопросе. –

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