【发布时间】:2019-06-03 13:57:12
【问题描述】:
编辑:请在此处查看更新后的问题:SQL: Select Most Recent Sequentially Distinct Value w/ Grouping
我在编写一个选择最后一个“新”顺序不同值的查询时遇到问题。由于这有点模棱两可,这里有一个例子来解释(假设行号表示顺序;在我的问题中,行是按日期排序的):
|--------|-------|
| RowNum | Col A |
|--------|-------|
| 1 | A |
| 2 | B |
| 3 | C |
| 4 | B |
| 5 | A |
| 6 | B |
会选择:
| 6 | B |
虽然 B 也出现在第 2 行和第 4 行,但第 5 行包含 A 的事实意味着第 6 行中的 B 是顺序不同的。但是如果表格看起来像这样:
|--------|-------|
| RowNum | Col A |
|--------|-------|
| 1 | A |
| 2 | B |
| 3 | C |
| 4 | B |
| 5 | A |
| 6 | A | <--
然后我们要选择:
| 5 | A |
如果我不关心值是不同的但不是连续的,我认为这将是一个更容易的问题。我不确定在进行查询时如何考虑顺序。
我试图通过计算每个 Col A 值出现的最小/最大行数来解决这个问题。该计算(使用第二个示例表)将产生如下结果:
|--------|--------|--------|
| ColA | MinRow | MaxRow |
|--------|--------|--------|
| A | 1 | 6 |
| B | 2 | 4 |
| C | 3 | 3 |
但是,这是我卡住的地方,因为虽然我可以正确选择 A 作为要使用的值,但我不知道如何使用该表中的其他行来识别我们想要 A 在第 5 行(因为它在 4) 处被 B 打断,而不是第 1 行的 A...
如果可以在 SQL 中完成此问题的任何帮助,将不胜感激。我正在运行 SQL 2008 SP4。
【问题讨论】:
标签: sql tsql sql-server-2008