假设我有以下(虚构的)数据集
@FunctionalInterface
对于我的数据集,我想删除所有 ID | Name | Location | LastUpdated
1 | Bill | Germany | 2017-01-02
2 | Bill | Germany | 2017-01-03
3 | Bill | Germany | 2017-01-04
4 | Bill | Germany | 2017-01-05
5 | Jack | U.K | 2017-01-02
6 | Jack | U.K | 2017-01-03
7 | Jack | U.K | 2017-01-04
8 | John | Japan | 2017-02-22
9 | John | Japan | 2017-02-23
10 | John | Japan | 2017-02-24
11 | John | Japan | 2017-02-25
等于lastupdated
的记录
我还想删除2017-01-03
等于或大于John
的所有lastupdated
记录
我尝试了以下SQL语句:
2017-02-24
但是这样,它只返回LastUpdated大于SELECT *
FROM Table
WHERE (LastUpdated <> '2017-01-03')
AND (Name <> 'John' AND LastUpdated >= '2017-02-24')
这看起来很基础,但我无法解决。有什么想法吗?
答案 0 :(得分:2)
您可以这样记录您的要求:
我要删除lastupdated等于2017-01-03的所有记录
根据您的尝试,这是正确的:
LastUpdated <> '2017-01-03'
我还想删除lastupdated等于或等于John的所有记录 大于2017-02-24
这有点棘手。我们要显示的记录不是John的 或记录是John的 AND 的日期必须小于2017- 02-24 。表示如下:
(
Name <> 'John' OR
(Name = 'John' AND LastUpdated < '2017-02-24')
)
所以最终的表达式是:
SELECT *
FROM [Table]
WHERE
LastUpdated <> '2017-01-03' AND
(
Name <> 'John' OR
(Name = 'John' AND LastUpdated < '2017-02-24')
)
如果name
可以容纳NULL
个值,则可能需要另一个OR表达式来检查NULL
:
(
Name <> 'John' OR
Name IS NULL OR
(Name = 'John' AND LastUpdated < '2017-02-24')
)
答案 1 :(得分:1)
您可以将其写为NOT
条件以使其简单:
WHERE NOT (
(lastupdated = 2017-01-03)
OR
(name = 'John' AND lastupdated >= '2017-02-24')
)