Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建一个;“第一”;SQL查询中的标识符_Sql_Reporting Services_Sql Server 2012 - Fatal编程技术网

创建一个;“第一”;SQL查询中的标识符

创建一个;“第一”;SQL查询中的标识符,sql,reporting-services,sql-server-2012,Sql,Reporting Services,Sql Server 2012,我需要能够识别表视图中第一次出现的一组行,一个问题集。不确定如何清楚地界定问题,因此将尝试在下面列出 示例数据 +-----------+------------+--------+------+----------+--------+ | Reference | Date | PerRef | QSet | Question | Answer | +-----------+------------+--------+------+----------+--------+ |

我需要能够识别表视图中第一次出现的一组行,一个问题集。不确定如何清楚地界定问题,因此将尝试在下面列出

示例数据

+-----------+------------+--------+------+----------+--------+
| Reference |    Date    | PerRef | QSet | Question | Answer |
+-----------+------------+--------+------+----------+--------+
|         1 | 01/01/2015 | a      | QS1  | Q1       | A1     |
|         1 | 01/01/2015 | a      | QS1  | Q2       | A2     |
|         1 | 01/01/2015 | a      | QS1  | Q3       | A3     |
|         2 | 02/01/2015 | a      | QS1  | Q1       | A1     |
|         2 | 02/01/2015 | a      | QS1  | Q2       | A2     |
|         2 | 02/01/2015 | a      | QS1  | Q3       | A3     |
|         3 | 02/01/2015 | b      | QS2  | Q1       | A1     |
|         3 | 02/01/2015 | b      | QS2  | Q2       | A2     |
|         3 | 02/01/2015 | b      | QS2  | Q3       | A3     |
|         4 | 02/01/2015 | b      | QS3  | Q1       | A1     |
|         4 | 02/01/2015 | b      | QS3  | Q2       | A2     |
|         4 | 02/01/2015 | b      | QS3  | Q3       | A3     |
+-----------+------------+--------+------+----------+--------+
对于此表,我希望在select查询上生成一个新列,如下所示:

+-----------+------------+---------+-------+----------+--------+----------+--------+
| Reference |   Date     | PerRef  | QSet  | Question | Answer | Earliest | Latest |
+-----------+------------+---------+-------+----------+--------+----------+--------+
|         1 | 01/01/2015 | a       | QS1   | Q1       | A1     |        1 |      2 |
|         1 | 01/01/2015 | a       | QS1   | Q2       | A2     |        1 |      2 |
|         1 | 01/01/2015 | a       | QS1   | Q3       | A3     |        1 |      2 |
|         2 | 02/01/2015 | a       | QS1   | Q1       | A1     |        2 |      1 |
|         2 | 02/01/2015 | a       | QS1   | Q2       | A2     |        2 |      1 |
|         2 | 02/01/2015 | a       | QS1   | Q3       | A3     |        2 |      1 |
|         3 | 02/01/2015 | b       | QS2   | Q1       | A1     |        1 |      1 |
|         3 | 02/01/2015 | b       | QS2   | Q2       | A2     |        1 |      1 |
|         3 | 02/01/2015 | b       | QS2   | Q3       | A3     |        1 |      1 |
|         4 | 05/01/2015 | b       | QS3   | Q1       | A1     |        1 |      1 |
|         4 | 05/01/2015 | b       | QS3   | Q2       | A2     |        1 |      1 |
|         4 | 05/01/2015 | b       | QS3   | Q3       | A3     |        1 |      1 |
+-----------+------------+---------+-------+----------+--------+----------+--------+
我有这两个最早和最新的,因为它然后让我回拉第一个完成或最新的。通常情况下,查询将仅返回针对某人的一类问题中的一类,无论是第一个完成的问题还是最新的问题。当然,拥有这两个选项将使您能够返回最早或最晚的版本,并看到两者之间的变化

因此,为了尝试重新表述这一点,我需要根据引用创建一个计数器,按PerRef和QSet分组,按日期排序(升序或降序)


当然,如果有更好的方法,请说明,因为我可能会使这过于复杂-如果有方法选择PerRef和Qset上分组的第一个或最后一个引用?

我使用
行数()找到了解决方案。

它的作用是:
1.为每个
引用计算
最早的
/
PerRef
/
Qset
组合
2.使用
Reference
/
PerRef
/
Qset

如果您在理解查询时遇到困难,请查看
行编号()
文档:

使用类似的方法生成
最新的
列应该不会有问题。

如果还有3个其他条目,如3\u 03/01/2015\u a\u QS1\u。。。最早的值是2还是3?应该是3-我想应该是一个序列号,但如果有意义的话,它会应用于PerRef&Qset的代理分组。因此,4_03/01/2015_a_QS1_将是4 an So。感谢您的回复-我要到周一才能尝试。快速提问。#tmp_表和t-是源表(#tmp_表)和在查询(t)中创建的虚拟表的名称。很抱歉问您,但我只是想澄清一下,我不确定是否理解您的问题,但是
t
#tmp_表的别名
,这是我为您的
Reference/Date/PerRef/QSet/question/Answer
表使用的名称,因为我不知道它的实际名称。
SELECT t.*, orderT.Earliest
FROM #tmp_table t JOIN (SELECT Reference, PerRef, Qset, row_number() OVER (PARTITION BY PerRef, Qset order by Date ) as Earliest
                        FROM #tmp_table
                        GROUP BY Reference, Date, PerRef, Qset) orderT ON t.Reference = orderT.Reference
                                                                  AND t.PerRef = orderT.PerRef
                                                                  AND t.Qset = orderT.Qset