我有一个用于传输历史记录的SQL表,如下所示:
ID | Date_out | Date_in
---+----------+----------
1 | 01.01.15 |
2 | 01.01.15 | 13.05.15
2 | 16.07.14 | 01.01.15
4 | 28.07.15 |
4 | 16.07.14 | 28.07.15你可以说,ID 2的物品在16.07.14送出,01.01.15返回,之后01.01.15再次出货,13.05.15返回。所以在我办公室。
ID为4的物品于16.07.14送出,28.07.15返回,之后于28.07.15再次外出。所以它不在我的办公室
现在我想要一个包含在我办公室里的每个项目的列表和一个包含不在我办公室的项目的列表。我必须使用Microsoft。
result 1: Items in my office
ID | Date_out | Date_in
---+----------+----------
2 | 01.01.15 | 13.05.15
result 2: Items outside my office
ID | Date_out | Date_in
---+----------+----------
1 | 01.01.15 |
4 | 28.07.15 |问题是我有很多次的物品。当我按ID分组时,空日期就消失了,而且我仍然有多个项:
SELECT
table.item_ID,
table.Date_out,
table.Date_in
FROM table
WHERE table.date_in<Now()
GROUP BY table.item_ID有谁有主意吗?
发布于 2015-08-24 15:48:38
另一个解决你问题的方法
SELECT
id,
CASE
WHEN
SUM(CASE WHEN date_in IS NULL THEN 1 ELSE 0 END) > 0
THEN 'out'
ELSE 'in'
END
FROM
table_name
GROUP BY id;发布于 2015-08-24 16:24:29
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(ID INT NOT NULL
,Date_out DATE NOT NULL
,Date_in DATE NULL
,PRIMARY KEY(id,date_out)
);
INSERT INTO my_table VALUES
(1 ,'2015-01-01',NULL),
(2 ,'2015-01-01','2015-05-13'),
(2 ,'2014-07-16','2015-01-01'),
(4 ,'2015-07-28',NULL),
(4 ,'2014-07-16','2015-07-28');
SELECT x.id on_loan
FROM my_table x
JOIN
( SELECT id, MAX(date_out) max_date_out FROM my_table GROUP BY id) y
ON y.id = x.id
AND y.max_date_out = x.date_out
WHERE date_in IS NULL;
+---------+
| on_loan |
+---------+
| 1 |
| 4 |
+---------+
SELECT x.id in_stock
FROM my_table x
JOIN (SELECT id, MAX(date_out) max_date_out FROM my_table GROUP BY id) y
ON y.id = x.id
AND y.max_date_out = x.date_out
WHERE date_in IS NOT NULL;
+----------+
| in_stock |
+----------+
| 2 |
+----------+或者,不太有用..。
SELECT GROUP_CONCAT(CASE WHEN date_in IS NULL THEN x.id END) on_loan
, GROUP_CONCAT(CASE WHEN date_in IS NOT NULL THEN x.id END) in_stock
FROM my_table x
JOIN
( SELECT id, MAX(date_out) max_date_out FROM my_table GROUP BY id) y
ON y.id = x.id AND y.max_date_out = x.date_out;
+---------+----------+
| on_loan | in_stock |
+---------+----------+
| 1,4 | 2 |
+---------+----------+https://stackoverflow.com/questions/32186058
复制相似问题