我正在使用一个“Route”表,该表详细说明了特定ProductID的一组有序“Stages”:
| ID | ProductID | StageID | Order |
|----+-----------+---------+-------|
| 0 | 1 | 4 | 1 |
| 1 | 1 | 2 | 2 |
| 2 | 1 | 3 | 3 |
| 3 | 1 | 7 | 4 |
| 4 | 1 | 5 | 5 |
|----+-----------+---------+-------|
| ID | RecordDate | Serial Number | StageID | Result |
|----+---------------------+---------------+---------+--------|
| 0 | 2019-03-16 00:00:00 | G001 | 4 | 1 |
| 1 | 2019-03-16 00:01:00 | G001 | 2 | 1 |
| 2 | 2019-03-16 00:02:00 | G001 | 2 | 0 |
|----+---------------------+---------------+---------+--------|
从上面的假设数据可以看出,序列号G001已经通过了第4阶段,然后通过了第2阶段,然后又通过了第2阶段,但是它再次通过了第2阶段,并且失败了。
现在,我想从这个记录表中为一个特定的序列号选择结果,其中StageID存在于该产品的路由中。
很简单-我的问题是:
SELECT StageID, Result, RecordDate
FROM Records
WHERE StageID IN (SELECT StageID FROM Route WHERE ProductID = 1) AND SerialNumber = 'G001';
对于以上数据,这给了我:
| StageID | Result | RecordDate |
|---------+--------+---------------------|
| 4 | 1 | 2019-03-16 00:00:00 |
| 2 | 1 | 2019-03-16 00:00:01 |
| 2 | 0 | 2019-03-16 00:00:02 |
|---------+--------+---------------------|
结果显示在该StageID和SerialNumber的记录表中。在给定的例子中,我想要:
| StageID | Result | RecordDate |
|---------+--------+---------------------|
| 4 | 1 | 2019-03-16 00:00:00 |
| 2 | 0 | 2019-03-16 00:00:02 |
|---------+--------+---------------------|
过滤可以在RecordDate上完成,或者更容易地在Records.ID上完成。
但是我不知道如何使用SQL来实现这一点,我认为这是因为我对这门语言了解不够,无法清楚地表达我正在尝试做的事情。
所以我的问题是:有没有可能在每个阶段的最新记录上过滤这些结果?