2015-08-01 3 views
1

У меня есть небольшая проблема, придя к правильному синтаксису для моего кода, чтобы делать то, что я хочу. Im суммируя количество часов, проработанных в определенную неделю сотрудником, но я хочу исключить определенные дни из моего запроса. Сотрудник может работать для разных клиентов, которые определяются client_id.Mysql исключает субботу, где другое значение равно

Теперь приведенный ниже код имеет синтаксическую ошибку в операторах WHERE внутри скобок, и я знаю, почему, я просто позволю им быть там ради объяснения того, чего я хочу достичь в этом случае.

Я ценю любую помощь, которую вы можете мне дать.

КПП: Я также пробовал И (DAYOFWEEK (дата) <> 7 И client_id = '1'), но это тоже не работает. Я Recon это потому, что мое возвращение запрос только одна строка результата, и, таким образом, мой выше код не делает ничего, в то время как запрос цикла

SELECT 
    date, 
    client_id, 
    SUM(hours)-37.5 AS total, 
    SUM(lunch = 'yes') AS lunch 
FROM 
    hours 
WHERE 
    CONCAT(WEEK(date, 1)) = '25' 
AND 
    CONCAT(YEAR(date)) = '2015' 
AND 
    employee_id = '14' 
AND (DAYOFWEEK(date) <> 7 WHERE client_id = '1') 
AND (DAYOFWEEK(date) <> 1 WHERE client_id = '2') 
AND 
    status = 'billed' 
HAVING SUM(hours) > 37.5 

ответ

0

Вы можете использовать кучу логических not и and логических операторов строить этот логика:

SELECT 
    date, 
    client_id, 
    SUM(hours)-37.5 AS total, 
    SUM(lunch = 'yes') AS lunch 
FROM 
    hours 
WHERE 
    CONCAT(WEEK(date, 1)) = '25' 
AND 
    CONCAT(YEAR(date)) = '2015' 
AND 
    employee_id = '14' 
AND NOT (DAYOFWEEK(date) = 7 AND client_id = '1') 
AND NOT (DAYOFWEEK(date) = 1 AND client_id = '2') 
AND 
    status = 'billed' 
HAVING SUM(hours) > 37.5 
Смежные вопросы