【发布时间】:2021-01-10 01:05:40
【问题描述】:
我对 SQL 还很陌生;请原谅这个问题的幼稚。
假设您有一个表,其中每一行都有以下条目,所有这些条目都是 varchar(50):DocumentName、DocumentNumber、Status、PreviousUser、NextUser、Timestamp。时间戳是这样的,字母排序也是按时间顺序排列的。虽然每一行都是唯一的,但不能保证每行都有唯一的 DocumentName 和 DocumentNumber 条目。
我想做一个查询,返回 unique DocumentName、DocumentNumber 和 Status 的所有文档,其中该 DocumentName 和 DocumentNumber 的 last NextUser 条目(由Timestamp) 匹配我拥有的字符串。我将如何将其格式化为查询?
这是一个包含示例返回的示例表,可能有助于澄清我的要求。
+================+================+============+==============+==========+============+
| DocumentName | DocumentNumber | Status | PreviousUser | NextUser | Timestamp |
+================+================+============+==============+==========+============+
| Change Request | 1 | PROCESSING | SSMITH | MJONES | 2020 02 01 |
+----------------+----------------+------------+--------------+----------+------------+
| Change Request | 1 | DRAFT | JDOE | SSMITH | 2020 01 01 |
+----------------+----------------+------------+--------------+----------+------------+
| Change Request | 1 | COMPLETE | SSMITH | NULL | 2020 02 22 |
+----------------+----------------+------------+--------------+----------+------------+
| Change Request | 1 | APPROVAL | MJONES | SSMITH | 2020 02 21 |
+----------------+----------------+------------+--------------+----------+------------+
| Change Request | 3 | PROCESSING | JDOE | SSMITH | 2020 04 17 |
+----------------+----------------+------------+--------------+----------+------------+
| User Request | 1 | APPROVAL | SSMITH | MJONES | 2020 01 01 |
+----------------+----------------+------------+--------------+----------+------------+
| User Request | 1 | REWORK | MJONES | SSMITH | 2020 03 03 |
+----------------+----------------+------------+--------------+----------+------------+
| User Request | 1 | APPROVAL | SSMITH | MJONES | 2020 03 07 |
+----------------+----------------+------------+--------------+----------+------------+
| User Request | 7 | DRAFT | JDOE | SSMITH | 2020 03 17 |
+----------------+----------------+------------+--------------+----------+------------+
| User Request | 7 | APPROVAL | SSMITH | MJONES | 2020 03 19 |
+----------------+----------------+------------+--------------+----------+------------+
| Problem Report | 1 | PROCESSING | JDOE | SSMITH | 2020 05 03 |
+----------------+----------------+------------+--------------+----------+------------+
| Problem Report | 1 | DRAFT | JDOE | JDOE | 2020 05 02 |
+----------------+----------------+------------+--------------+----------+------------+
| Problem Report | 9 | COMPLETE | JDOE | NULL | 2020 06 24 |
+----------------+----------------+------------+--------------+----------+------------+
| Problem Report | 13 | DRAFT | JDOE | SSMITH | 2020 07 04 |
+----------------+----------------+------------+--------------+----------+------------+
| Problem Report | 13 | REWORK | SSMITH | JDOE | 2020 07 17 |
+----------------+----------------+------------+--------------+----------+------------+
如果我想匹配 JDOE,我应该返回一行:('Problem Report', 13)。
如果我想匹配 SSMITH,我应该返回两行:('Change Request', 3) 和 ('Problem Report', 1)。
如果我想匹配 MJONES,我应该返回两行:('User Request', 1) 和 ('User Request', 7)。
如果我留下了模棱两可的东西,请告诉我。
【问题讨论】:
-
向我们展示一些示例表数据和预期结果 - 全部为格式化文本(无图像)。 minimal reproducible example.
-
我已将其添加到原始帖子中。谢谢。
-
不相关,但是:在
varchar列中存储时间戳(实际上是日期)是一个非常非常糟糕的主意。你有机会修复损坏的数据模型吗? -
我使用 NextUser 列来确定用户。我将来可能有机会修复时间戳,但不会很快。我正在使用 MSSQL Server Server 2008 R2。
-
能否提供插入语句格式的样本数据?例如,('Change Request', '1', 'PROCESSING', 'SSMITH', 'MJONES', '2020-02-01')
标签: sql sql-server sql-server-2008