【发布时间】:2021-06-07 03:45:23
【问题描述】:
我有一张桌子(比如,桌子名称是“items”),如下所示。
| id | timestamp | name | amount |
|---|---|---|---|
| 100 | 16106800 | pqr | 10 |
| 100 | 16106800 | pqr | 0 |
| 100 | 16106400 | pqr | 15 |
如果有多个具有相同名称和相同时间戳的记录,那么我想排除一个数量为零的记录。例如 - 在上表中,我们有两条记录(第一条和第二条记录)具有相同的名称和相同的时间戳,所以我必须排除一条数量为零的记录。
预期结果如下:
| id | timestamp | name | amount |
|---|---|---|---|
| 100 | 16106800 | pqr | 10 |
| 100 | 16106400 | pqr | 15 |
我写了一个类似下面的查询,但这并不完全有效。
SELECT *
FROM items w
WHERE EXISTS (
SELECT *
FROM items x
WHERE x.timestamp = w.timestamp AND x.name=w.name
) AND w.amount > 0
当所有时间戳都不同时,我的上述查询会失败。如果没有相同名称和相同时间戳的记录,则不会从 items 表中排除任何内容。
编辑:如果该表中只有一行金额为零,则不应排除。
【问题讨论】:
-
如果该名称和时间戳只有一个
0行怎么办? -
如果只有一行则不应排除。
标签: sql sql-server subquery exists