Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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 在已排序的MS Access查询中查找连续区域_Sql_Ms Access_Ms Access 2007 - Fatal编程技术网

Sql 在已排序的MS Access查询中查找连续区域

Sql 在已排序的MS Access查询中查找连续区域,sql,ms-access,ms-access-2007,Sql,Ms Access,Ms Access 2007,我是堆栈溢出的长期粉丝,但我遇到了一个问题,我还没有找到解决方法,需要一些专家帮助。 我有一个按时间顺序排序的查询,日期-时间复合键是唯一的,从未删除过,还有一些数据。我想知道的是,是否有一种方法可以找到值发生变化的区域的起点或终点?即 DateTime someVal1 someVal2 someVal3 target 1 3 4 A 1 2 4 A 1 3 4 A 1 2 4 B 1 2 5 B 1 2 5 A 我的查询返回第1、4和6行。它在列5中找到从A到B的变化,然后从B回到A?我尝

我是堆栈溢出的长期粉丝,但我遇到了一个问题,我还没有找到解决方法,需要一些专家帮助。 我有一个按时间顺序排序的查询,日期-时间复合键是唯一的,从未删除过,还有一些数据。我想知道的是,是否有一种方法可以找到值发生变化的区域的起点或终点?即

DateTime someVal1 someVal2 someVal3 target
1 3 4 A 1 2 4 A 1 3 4 A 1 2 4 B 1 2 5 B 1 2 5 A
我的查询返回第1、4和6行。它在列5中找到从A到B的变化,然后从B回到A?我尝试了查找重复项的方法,并在totals属性中使用了min和max,但是它给出了第一个和最后一个全局值,而不是局部的max和min?有类似的问题吗?

我没有看到someVal1、someVal2和someVal3字段的任何用途,所以我将它们忽略了。我使用自动编号作为主键,而不是日期/时间字段;但是这种方法也应该适用于日期/时间主键。这是我的表格版本中的数据

pkey_field target
1          A
2          A
3          A
4          B
5          B
6          A
我使用了一个相关子查询来查找每行前面的pkey_字段值

SELECT
    m.pkey_field,
    m.target,
    (SELECT Max(pkey_field)
        FROM YourTable
        WHERE pkey_field < m.pkey_field)
    AS prev_pkey_field
FROM YourTable AS m;

我没有看到someVal1、someVal2和someVal3字段的任何用途,所以我将它们忽略了。我使用自动编号作为主键,而不是日期/时间字段;但是这种方法也应该适用于日期/时间主键。这是我的表格版本中的数据

pkey_field target
1          A
2          A
3          A
4          B
5          B
6          A
我使用了一个相关子查询来查找每行前面的pkey_字段值

SELECT
    m.pkey_field,
    m.target,
    (SELECT Max(pkey_field)
        FROM YourTable
        WHERE pkey_field < m.pkey_field)
    AS prev_pkey_field
FROM YourTable AS m;

这是第一次尝试

SELECT t1.Row, t1.target
FROM t1 WHERE (((t1.target)<>NZ((SELECT TOP 1  t2.target FROM t1 AS t2 WHERE t2.DateTimeId<t1.DateTimeId ORDER BY t2.DateTimeId DESC),"X")));

这是第一次尝试

SELECT t1.Row, t1.target
FROM t1 WHERE (((t1.target)<>NZ((SELECT TOP 1  t2.target FROM t1 AS t2 WHERE t2.DateTimeId<t1.DateTimeId ORDER BY t2.DateTimeId DESC),"X")));

啊!这很聪明!我仍然在努力掌握子查询的力量,但这是一个非常出色和清晰的回答,我希望我有更多的声誉来支持你的意见。这两页来自你的同胞的文章可能有助于提高你的掌握力:哈哈哈!我已经翻了那两页了,我正拼命地翻着。另一个简单的问题是,这对于固定表非常有效,但是我如何修改这段代码来处理查询呢?这将允许一个表单灵活地选择一个日期范围?为那些在家玩的人编辑我发现,要使这个查询工作,字段名不能通过使用sql中的AS来定义,它们必须是本机字段名才能工作,为@hansupahhhh干杯!这很聪明!我仍然在努力掌握子查询的力量,但这是一个非常出色和清晰的回答,我希望我有更多的声誉来支持你的意见。这两页来自你的同胞的文章可能有助于提高你的掌握力:哈哈哈!我已经翻了那两页了,我正拼命地翻着。另一个简单的问题是,这对于固定表非常有效,但是我如何修改这段代码来处理查询呢?这将允许一个表单灵活地选择一个日期范围?为那些在家玩的人编辑我发现,要使这个查询工作,字段名不能通过使用sql中的AS来定义,它们必须是本机字段名才能工作,为@HansUp干杯