java - 如何检查一周内特定列的所有值

标签 java mysql sql-server spring hibernate3

我有一个名为 timesheet 的表。其中我有以下行

  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。但是我得到的结果是 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。我得到的结果是 1。

如何在mssql中编写上述要求的查询。 场景 1 有效,但场景 2 无效。 如何达到想要的结果。 任何帮助将不胜感激!!!

最佳答案

请注意,这是 mysql 的解决方案,因为它也被标记了。它使用 MySQL 的“周”标准定义 - 这似乎与您自己的定义不同。如果更符合您的定义,您可以使用 WEEK(date,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 |
+----+----------+--------+-------+------------+

编辑:结果为 WEEK(date,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)

关于java - 如何检查一周内特定列的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27504172/

相关文章:

Java源码里的设计模式

java - Java 按键对 HashMap 进行排序

mysql - ER_PARSE_ERROR : You have an error in your SQL syntax;

mysql - 在mysql中更改一个单元格的数据

php - MySQL - 连接两个表并打印重复项

sql - 如何选择列名并获取 SQL Server 的数据?

java - 在javafx中更新组合框中的文本字体

java - 为什么需要注销OnPreferenceChangeListener?

sql - TSQL - 在初始查询中运行 "duplicates"/误报的日期比较?

sql-server - "The size associated with an extended property cannot be more than 7,500 bytes"运行 `sp_addextendedproperty`