Проблема с левым соединением - соответствующий номер - PullRequest
1 голос
/ 12 августа 2011

См. SQL-запрос ниже, он подсчитывает количество Да и Нет между CheckDate

В поле MatchSales - это не работает так, как я хотел.Он должен найти D.MobileNO (в зависимости от CheckDate) совпадение с S.mobile (проверить все записи в таблице sales)

SELECT D.Username, 
    SUM(CASE WHEN D.type = 'Yes' AND UNIX_TIMESTAMP(CheckDate) >= $From_timestamp AND UNIX_TIMESTAMP(CheckDate) <= $To_timestamp THEN 1 ELSE 0 END) as Yes, 
    SUM(CASE WHEN D.type = 'No' AND UNIX_TIMESTAMP(CheckDate) >= $From_timestamp AND UNIX_TIMESTAMP(CheckDate) <= $To_timestamp THEN 1 ELSE 0 END) as No, 
    SUM(CASE WHEN S.mobile IS NULL THEN 0 ELSE 1 END) as MatchSales
FROM dairy as D 
   LEFT JOIN (SELECT DISTINCT mobile FROM sales) as S on D.MobileNo = S.mobile
WHERE source = 'Company' 
GROUP BY D.Username

Ответы [ 2 ]

2 голосов
/ 12 августа 2011

просто добавьте условие Checkdate из вашего CASE в предложение where:

SELECT D.Username,      
      SUM(CASE WHEN D.type = 'Yes' THEN 1 ELSE 0 END) AS Yes,      
      SUM(CASE WHEN D.type = 'No'  THEN 1 ELSE 0 END) AS No,      
      SUM(CASE WHEN S.mobile IS NULL THEN 0 ELSE 1 END) AS MatchSales 
 FROM dairy AS D     
 LEFT JOIN (SELECT DISTINCT mobile FROM sales) AS S ON D.MobileNo = S.mobile 
 WHERE D.source = 'Company'  
 AND   UNIX_TIMESTAMP(D.CheckDate) >= $From_timestamp 
 AND   UNIX_TIMTIMESTAMP(D.CheckDate) <= $To_timestamp 
 GROUP BY D.Username

без него вы будете полностью сканировать молочные продукты

1 голос
/ 12 августа 2011

- Я думаю, вот как ты это делаешь:

SELECT SUM(Yes) AS Yes, SUM(No) AS No
FROM (
    SELECT D.Username, 
        (CASE WHEN D.type = 'Yes' AND UNIX_TIMESTAMP(CheckDate) >= $From_timestamp AND UNIX_TIMESTAMP(CheckDate) <= $To_timestamp THEN 1 ELSE 0 END) as [Yes], 
        (CASE WHEN D.type = 'No' AND UNIX_TIMESTAMP(CheckDate) >= $From_timestamp AND UNIX_TIMESTAMP(CheckDate) <= $To_timestamp THEN 1 ELSE 0 END) as [No], 
        (CASE WHEN S.mobile IS NULL THEN 0 ELSE 1 END) as MatchSales
    FROM dairy as D 
        LEFT JOIN (SELECT DISTINCT mobile FROM sales) as S on D.MobileNo = S.mobile
    WHERE source = 'Company' 
    GROUP BY D.Username
) T
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...