Группировка по дням из 2 таблиц - PullRequest
0 голосов
/ 07 октября 2009

У меня есть 2 таблицы: «заказы» и «посещения». в таблице заказов я сохраняю некоторые подробности о заказе, в том числе "userIP" и "orderDate". в таблице посещений я сохраняю детали каждый раз, когда пользователь посещает мою веб-страницу, включая «userIP» и «visitDate». Я использую ASP.NET и SQL SERVER 2005. я хочу создать статистическую таблицу, в которой я сохраняю количество посещенных пользователей и количество пользователей, которые заказали ОБА ГРУППИРОВАТЬ ПО ДНЮ пока я получил:

  select count(userIP) as NumOfOrders,
         dateadd(dd, datediff(dd, 0, orderDate),0) as Date
    from Orders
group by dateadd(dd, datediff(dd, 0, orderDate), 0)

это работает нормально и дает мне количество заказов, сгруппированных по дням, но как мне добавить к этому общее количество посещений, сгруппированных по дням?

Ответы [ 2 ]

0 голосов
/ 07 октября 2009

Я бы сделал это:

SELECT v.userIP, NumOfVisits, NumOfOrders, v.Date
FROM (
    SELECT userIP, count(*) as NumOfVisits,
         dateadd(dd, datediff(dd, 0, visitDate),0) as Date
    FROM visits
    GROUP BY userIP, dateadd(dd, datediff(dd, 0, orderDate), 0)) v
LEFT JOIN (
    SELECT userIp, count(*) as NumOfOrders,
         dateadd(dd, datediff(dd, 0, orderDate),0) as Date
    FROM orders
    GROUP BY UserIP, dateadd(dd, datediff(dd, 0, orderDate), 0)) o
 ON o.UserIP = v.UserIP
    AND o.Date = v.Date

и ваш результат должен быть таким:

78.34.5.11 | 3 | 1 | 2009.10.06
78.34.5.19 | 9 | 0 | 2009.10.06

если вам не нужно группировать по userIP, вы можете сделать это:

SELECT NumOfVisits, NumOfOrders, v.Date
FROM (
    SELECT count(*) as NumOfVisits,
         dateadd(dd, datediff(dd, 0, visitDate),0) as Date
    FROM visits
    GROUP BY dateadd(dd, datediff(dd, 0, visitDate), 0)) v
LEFT JOIN (
    SELECT count(*) as NumOfOrders,
         dateadd(dd, datediff(dd, 0, orderDate),0) as Date
    FROM orders
    GROUP BY dateadd(dd, datediff(dd, 0, orderDate), 0)) o
 ON o.Date = v.Date

и ваш результат будет выглядеть так:

12 | 1 | 2009.10.06
0 голосов
/ 07 октября 2009
SELECT COALESCE(O1.Date, V1.Date) Date,
       COALESCE(O1.NumOfOrders, 0) NumOfOrders,
       COALESCE(V1.TotalVisits, 0) TotalVisits
FROM 
     (select dateadd(dd,0, datediff(dd, 0, O.orderDate)) Date,
             count(O.userIP) NumOfOrders
        from Orders O
    group by dateadd(dd,0, datediff(dd, 0, O.orderDate))) O1
FULL JOIN
     (select dateadd(dd,0, datediff(dd, 0, V.visitDate)) Date,
             count(V.userIP) TotalVisits
        from Visits V
    group by dateadd(dd,0, datediff(dd, 0, V.visitDate))) V1
on O1.Date = V1.Date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...