2014-12-16 5 views
0

у меня есть таблица под названием timesheet.In, что я есть ниже строкКак проверить все значения для определенного столбца в неделю

ID Status ProjId ActId Date 
    1 pending 1  1  2014-aug-07 
    2 denied 1  2  2014-aug-08 
    3 saved 1  3  2014-aug-09 
    4 approved 1  4  2014-aug-10 

я использовал ниже запрос для получения желаемого результата.

SELECT * from tblTimesheet 
WHERE DATEPART(wk,spentDate) = 32 AND ((timesheetstatus = 'Pending' or timesheetstatus = 'Approved') and (timesheetstatus <> 'Saved' or timesheetstatus <> 'Denied')) 

Мой ожидаемый результат для приведенного выше запроса 0.But я получаю результат 1.

5 pending 1  1  2014-aug-11 
    6 pending 1  2  2014-aug-12 
    7 approved 1  3  2014-aug-13 
    8 approved 1  4  2014-aug-14 

этом случае мой запрос работает.

SELECT * from tblTimesheet 
WHERE DATEPART(wk,spentDate) = 32 AND ((timesheetstatus = 'Pending' or timesheetstatus = 'Approved') and (timesheetstatus <> 'Saved' or timesheetstatus <> 'Denied')) 

Мой ожидаемый результат для приведенного выше запроса 1.I получить результат равен 1.

Как написать запрос для вышеуказанного требования в MSSQL. Сценарий 1 работает. Но сценарий2 не работает. Как добиться желаемого результата. Любая помощь будет принята с благодарностью!

+0

Существует только одна строка за неделю 32, не так ли? – Strawberry

+0

нет, одна неделя имеет много строк – Madhesh

+0

Но не в вашем примере – Strawberry

ответ

1

Обратите внимание, что это решение для MySQL, потому что был также помечены. Он использует стандартную дефиницию MySQL в течение недели, которая, по-видимому, отличается от вашего собственного определения. Вы можете использовать WEEK (дата, 3) или что-то подобное, если это лучше соответствует вашему определению.

DROP TABLE IF EXISTS my_table; 

CREATE TABLE my_table 
(ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY 
,Status VARCHAR(20) NOT NULL 
,ProjId INT NOT NULL 
,ActId INT NOT NULL 
,Date DATE NOT NULL 
); 

INSERT INTO my_table VALUES 
(1 ,'pending',1  ,1  ,'2014-08-07'), 
(2 ,'denied', 1  ,2  ,'2014-08-08'), 
(3 ,'saved', 1  ,3  ,'2014-08-09'), 
(4 ,'approved', 1  ,4  ,'2014-08-10'); 

SELECT *,WEEK(date) FROM my_table; 
+----+----------+--------+-------+------------+------------+ 
| ID | Status | ProjId | ActId | Date  | WEEK(date) | 
+----+----------+--------+-------+------------+------------+ 
| 1 | pending |  1 |  1 | 2014-08-07 |   31 | 
| 2 | denied |  1 |  2 | 2014-08-08 |   31 | 
| 3 | saved |  1 |  3 | 2014-08-09 |   31 | 
| 4 | approved |  1 |  4 | 2014-08-10 |   32 | 
+----+----------+--------+-------+------------+------------+ 

SELECT x.* 
    FROM my_table x 
    LEFT 
    JOIN my_table y 
    ON WEEK(y.date) = WEEK(x.date) 
    AND y.status NOT IN ('approved','pending') 
WHERE y.id IS NULL; 
+----+----------+--------+-------+------------+ 
| ID | Status | ProjId | ActId | Date  | 
+----+----------+--------+-------+------------+ 
| 4 | approved |  1 |  4 | 2014-08-10 | 
+----+----------+--------+-------+------------+ 

Edit: Результат с WEEK (дата, 3) ...

SELECT x.* 
    FROM my_table x 
    LEFT 
    JOIN my_table y 
    ON WEEK(y.date,3) = WEEK(x.date,3) 
    AND y.status NOT IN ('approved','pending') 
WHERE y.id IS NULL; 
Empty set (0.00 sec) 
+0

Спасибо .. Как найти статус только в ожидании или одобренном на определенную неделю. Заранее спасибо. – Madhesh

+0

Я не понимаю. Рассмотрите возможность предоставления более полного набора данных и желаемого результата. – Strawberry

+0

, Это сработало для меня. Спасибо за подробное объяснение. – Madhesh

0

попробовать этот

SELECT * 
FROM tblTimesheet 
WHERE YEARWEEK(STR_TO_DATE(Date,"%Y-%M-%d"))=YEARWEEK(CURDATE()) AND (status='pending' or status='approved'); 
+0

она возвращает значение 1.but я хочу zero.you должен проверить любой статус за этот день отказано или сохранено – Madhesh

0

попробовать это,

Select * from 
(
SELECT * from tblTimesheet 
WHERE DATEPART(wk,spentDate) = 32 
AND (timesheetstatus = 'Pending' or timesheetstatus = 'Approved') 
)tbl 
where 
(timesheetstatus <> 'Saved' or timesheetstatus <> 'Denied' 
Смежные вопросы