【发布时间】:2019-01-08 09:48:29
【问题描述】:
表:
person | borrow_date | is_borrowed | SN | date | id
1 | 2019-01-10...| 1 | 20 |2019-01-10...| 6
3 | 2019-01-09...| 3 | 10 |2019-01-09...| 5
1 | 2019-01-08...| 1 | 10 |2019-01-08...| 4
2 | 2019-01-08...| 1 | 10 |2019-01-08...| 3
1 | NULL | 2 | 20 |2019-01-07...| 2
1 | NULL | 2 | 10 |2019-01-07...| 1
我想要的输出是选择 "is_borrowed" 等于 1 并按 SN 分组的最新行,这样当使用 person=2 或 person=3 执行查询时,它将检索空集。而对于 person=1 它将返回两行。 想要的输出(其中 person=1):
person | borrow_date | is_borrowed | SN | date |id
1 | 2019-01-10...| 1 | 20 | 2019-01-10...|6
1 | 2019-01-08...| 1 | 10 | 2019-01-08...|4
想要的输出(其中 person=2):
EMPTY SET
想要的输出(其中 person=3):
EMPTY SET
这是我当前的查询,很遗憾它不起作用。
SELECT a.SN, a.is_borrowed,a.max(date) as date, a.person
FROM table a
INNER JOIN (SELECT SN, MAX(date) as date, osoba from table where person like
"2" group by SN) as b
ON a.SN=b.SN and a.date=b.date
WHERE a.person like "2" and a.is_borrowed=1
【问题讨论】:
-
为什么要为第 2 个人返回一个空集?
-
因为我只想检索最新的所有者(如果 is_borrowed = 1 则该人拥有该设备),因此人 2 不再拥有该设备,因为该设备有更新的记录(即由 SN 识别)在人员字段中具有不同的编号
-
我在想
SELECT * FROM t WHERE is_borrowed = 1 AND NOT EXISTS (SELECT 1 FROM t AS x WHERE sn = t.sn AND is_borrowed = 1 AND date > t.date)但它返回三行,因为 3 和 4 具有相同的日期。 -
我会尝试,因为我没有写更多的日期(小时等)。你没有包括 person 字段。
标签: mysql