【发布时间】:2016-07-01 01:39:01
【问题描述】:
我需要在TABLE_A 中获取所有Room_IDs,其中Room_IDs 的每个实例的最后两个或更多Status 连续空置(相对于Inspection_Date)并且在@987654326 中不存在@。
这是我用作示例的简化表:
TABLE_A:
Room_Id Status Inspection_Date
-------------------------------------
1 vacant 5/15/2015
2 occupied 5/21/2015
2 vacant 1/19/2016
1 occupied 12/16/2015
4 vacant 3/25/2016
3 vacant 8/27/2015
1 vacant 4/17/2016
3 vacant 12/12/2015
3 vacant 3/22/2016
4 occupied 2/2/2015
4 vacant 3/24/2015
TABLE_B:
Room_Id Status Inspection_Date
------------------------------------
1 vacant 5/15/2015
2 occupied 5/21/2015
2 vacant 1/19/2016
1 vacant 12/16/2015
1 vacant 4/17/2016
我的结果应该是这样的:
Room_Id Status Inspection_Date
---------------------------------
3 vacant 8/27/2015
3 vacant 12/12/2015
3 vacant 3/22/2016
4 occupied 2/2/2015
4 vacant 3/24/2015
4 vacant 3/25/2016
这是架构:
CREATE TABLE TABLE_A (`Room_Id` int,
`Status` varchar(55),
`Inspection_Date` varchar(55)
);
INSERT INTO TABLE_A (`Room_Id`, `Status`, `Inspection_Date`)
VALUES (1, 'vacant', '5/15/2015'),
(2, 'occupied', '5/21/2015'),
(2, 'vacant', '1/19/2016'),
(1, 'occupied', '12/16/2015'),
(4, 'vacant', '3/25/2016'),
(3, 'vacant', '8/27/2015'),
(1, 'vacant', '4/17/2016'),
(3, 'vacant', '12/12/2015'),
(3, 'vacant', '3/22/2016'),
(4, 'occupied', '2/2/2015'),
(4, 'vacant', '3/24/2015');
CREATE TABLE TABLE_B (`Room_Id` int,
`Status` varchar(55),
`Inspection_Date` varchar(55)
);
INSERT INTO TABLE_B (`Room_Id`, `Status`, `Inspection_Date`)
VALUES
(1, 'vacant', '5/15/2015'),
(2, 'occupied', '5/21/2015'),
(2, 'vacant', '1/19/2016'),
(1, 'vacant', '12/16/2015'),
(1, 'vacant', '4/17/2016'),;
【问题讨论】:
-
table_b 中不存在 room_id?或者您想在两列或全部三列上进行匹配?
-
Room_ID 不在 table_B 中,谢谢询问
-
如果您有像
Inspection_Date这样的列 - 您应该使用最合适的数据类型 - 而varchar(55)肯定不是。使用@ 987654333@(如果您只需要日期),或者DATETIME2(n),如果您还需要时间部分。另外:放弃那些烦人的反引号 - 那是 MySQL,它们在 T-SQL 中没有意义或不需要这些 -
@marc_s 这是为了方便使用。我显然在我的表上使用了 Date 数据类型。这里还有后面的勾号,因为我从消息 stackoverflow 的早期部分复制粘贴了列名,将它们用作
code的“迷你降价格式化工具”。不过谢谢你..
标签: sql sql-server tsql group-by