Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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_Postgresql_Ms Access_Analytics - Fatal编程技术网

Sql 访问-行号功能?

Sql 访问-行号功能?,sql,postgresql,ms-access,analytics,Sql,Postgresql,Ms Access,Analytics,我有这个查询,它给了我在postgres上想要的结果 问题是我必须在分析功能不存在的Access上翻译上面的查询 我用它来构建下面的查询 SELECT t."Internal_reference", t.from_code, t.to_code, t."Movement_date", t.shipment_number, t."PO_number", t."Quantity", t."Movemen

我有这个查询,它给了我在postgres上想要的结果

问题是我必须在分析功能不存在的Access上翻译上面的查询

我用它来构建下面的查询

SELECT 
      t."Internal_reference",
      t.from_code,
      t.to_code,
      t."Movement_date",
      t.shipment_number,
      t."PO_number",
      t."Quantity",
      t."Movement_value",
      t."Site",
      t."Import_date",
  COUNT(*) AS "cnt"
 FROM (
      SELECT "Internal_reference",
      MAX("Movement_date") AS maxtime
      FROM dw."LO-D4_Movements"
      GROUP BY "Internal_reference") r
LEFT OUTER JOIN dw."LO-D4_Movements" t
        ON t."Movement_date" = r.maxtime AND t."Internal_reference" = r."Internal_reference"
GROUP BY
      t.from_code,
      t.to_code,
      t."Movement_date",
      t.shipment_number,
      t."PO_number",
      t."Quantity",
      t."Movement_value",
      t."Site",
      t."Import_date",
      t."Internal_reference" 
ORDER BY t.from_code    
问题是我在cnt列中只有1个

我试图通过删除内部参考来调整它,请参见下文

SELECT 
      t.from_code,
      t.to_code,
      t."Movement_date",
      t.shipment_number,
      t."PO_number",
      t."Quantity",
      t."Movement_value",
      t."Site",
      t."Import_date",
  COUNT(*) AS "cnt"
 FROM (
      SELECT "Internal_reference",
      MAX("Movement_date") AS maxtime
      FROM dw."LO-D4_Movements"
      GROUP BY "Internal_reference") r
LEFT OUTER JOIN dw."LO-D4_Movements" t
        ON t."Movement_date" = r.maxtime AND t."Internal_reference" = r."Internal_reference"
GROUP BY
      t.from_code,
      t.to_code,
      t."Movement_date",
      t.shipment_number,
      t."PO_number",
      t."Quantity",
      t."Movement_value",
      t."Site",
      t."Import_date" 
ORDER BY t.from_code    
然而,结果更糟。cnt正在增长,但它给了我错误的cnt

任何帮助都是非常受欢迎的,因为我正在慢慢失去理智

谢谢


编辑:请查找

据我所知,这在MS Access中是一个真正的难题。一种方法是相关子查询,但您需要在每行上有一个唯一的id列:

SELECT t.*,
       (SELECT COUNT(*)
        FROM (SELECT "Internal_reference", MAX("Movement_date") AS maxtime
              FROM dw."LO-D4_Movements"
              GROUP BY "Internal_reference"
             ) as t2
        WHERE t2."Internal_reference" AND t."Internal_reference" AND

              t2."Movement_date" = t."Movement_date" AND
              t2.?? <= t.??
       ) as cnt
FROM (SELECT "Internal_reference", MAX("Movement_date") AS maxtime
      FROM dw."LO-D4_Movements"
      GROUP BY "Internal_reference"
     ) r INNER JOIN
     dw."LO-D4_Movements" t
     ON t."Movement_date" = r.maxtime AND
        t."Internal_reference" = r."Internal_reference";

这个??是指id或创建日期或允许对行进行计数的内容。

据我所知,这在MS Access中是一个真正的难题。一种方法是相关子查询,但您需要在每行上有一个唯一的id列:

SELECT t.*,
       (SELECT COUNT(*)
        FROM (SELECT "Internal_reference", MAX("Movement_date") AS maxtime
              FROM dw."LO-D4_Movements"
              GROUP BY "Internal_reference"
             ) as t2
        WHERE t2."Internal_reference" AND t."Internal_reference" AND

              t2."Movement_date" = t."Movement_date" AND
              t2.?? <= t.??
       ) as cnt
FROM (SELECT "Internal_reference", MAX("Movement_date") AS maxtime
      FROM dw."LO-D4_Movements"
      GROUP BY "Internal_reference"
     ) r INNER JOIN
     dw."LO-D4_Movements" t
     ON t."Movement_date" = r.maxtime AND
        t."Internal_reference" = r."Internal_reference";

这个??用于id或创建日期或允许计算行数的内容。

我认为Gordon Linoff的代码与您想要的非常接近,但是有一些输入错误我无法在不重写的情况下更正,所以我尝试一下

SELECT
    t1.Internal_reference,
    t1.Movement_date,
    t1.PO_Number as Combination_Of_Columns_Which_Make_This_Unique,
    t1.Other_columns,
    Count(1) AS Cnt
FROM
    ([LO-D4_Movements] AS t1
    INNER JOIN [LO-D4_Movements] AS t2 ON
        t1.Internal_reference = t2.Internal_reference AND
        t1.Movement_date = t2.Movement_date)
    INNER JOIN (
        SELECT
            t3.Internal_reference,
            MAX(t3.Movement_date) AS Maxtime
        FROM
            [LO-D4_Movements] AS t3
        GROUP BY
            t3.Internal_reference
            )  AS r ON
        t1.Internal_reference = r.Internal_reference AND
        t1.Movement_date = r.Maxtime
WHERE  
    t1.PO_Number>=t2.PO_Number
GROUP BY
    t1.Internal_reference,
    t1.Movement_date,t1.PO_Number,
    t1.Other_columns
ORDER BY
    t1.Internal_reference,
    t1.Movement_date,
    Count(1);
除了在maxmotation_date子查询中,主表还会被引入两次。一个版本用于显示结果,另一个版本用于计算记录以生成序列号

Gordon说每行需要一个唯一的id列。如果列的意思是也包括派生列,那么这是正确的。此外,它只需要在内部参考和移动日期的任何组合中是唯一的

我认为,也许是错误的,PO_编号就足够了。如果没有,则与该字段和其他字段连接,使其具有唯一性。where子句需要更新,以比较t1和t2的列组合,从而使其唯一


如果没有合适的组合可用,我不确定没有VBA和/或temp表也能像甘比尔建议的那样完成。

我认为Gordon Linoff的代码很接近您想要的,但是有一些输入错误我无法在不重写的情况下更正,所以我尝试一下

SELECT
    t1.Internal_reference,
    t1.Movement_date,
    t1.PO_Number as Combination_Of_Columns_Which_Make_This_Unique,
    t1.Other_columns,
    Count(1) AS Cnt
FROM
    ([LO-D4_Movements] AS t1
    INNER JOIN [LO-D4_Movements] AS t2 ON
        t1.Internal_reference = t2.Internal_reference AND
        t1.Movement_date = t2.Movement_date)
    INNER JOIN (
        SELECT
            t3.Internal_reference,
            MAX(t3.Movement_date) AS Maxtime
        FROM
            [LO-D4_Movements] AS t3
        GROUP BY
            t3.Internal_reference
            )  AS r ON
        t1.Internal_reference = r.Internal_reference AND
        t1.Movement_date = r.Maxtime
WHERE  
    t1.PO_Number>=t2.PO_Number
GROUP BY
    t1.Internal_reference,
    t1.Movement_date,t1.PO_Number,
    t1.Other_columns
ORDER BY
    t1.Internal_reference,
    t1.Movement_date,
    Count(1);
除了在maxmotation_date子查询中,主表还会被引入两次。一个版本用于显示结果,另一个版本用于计算记录以生成序列号

Gordon说每行需要一个唯一的id列。如果列的意思是也包括派生列,那么这是正确的。此外,它只需要在内部参考和移动日期的任何组合中是唯一的

我认为,也许是错误的,PO_编号就足够了。如果没有,则与该字段和其他字段连接,使其具有唯一性。where子句需要更新,以比较t1和t2的列组合,从而使其唯一


如果没有合适的组合可用,我不确定如果没有VBA和/或temp表(如甘比尔建议的那样)是否可以完成。

一个选项是进行“生成表”查询并添加“自动编号”字段。Hi@The甘比尔我只是从该表中提取数据,我不确定是否要创建新表,您需要vba在Access中创建临时表。这很有意义。。。我正在仔细考虑。很久以前转到SQL Server。。。对访问有点生疏。@TheGambill我说的是访问命中率,不是sqlserver;你能为你的PostgreSQL查询创建一个显示一些示例数据和所需结果的表吗?一个选项是做一个生成表查询并添加一个自动编号字段。Hi@TheGambill我只是从该表中提取数据,我不确定我是否要创建一个新表,你需要vba在Access中创建临时表。这很有意义。。。我正在仔细考虑。很久以前转到SQL Server。。。对访问有点生疏。@TheGambill我说的是访问命中率,不是sqlserver;你能为你的PostgreSQL查询创建一个显示一些样本数据和所需结果的查询吗?嗨@gordon linoff,谢谢你的查询,但是t2来自哪里…?对不起@gordon linoff你的查询在这种情况下不合适为什么会得到匿名的否决票?这是您在MS Access中模拟行数的方式。您好@gordon linoff,谢谢您的查询,但t2来自何处…?抱歉@gordon linoff您的查询在这种情况下不合适为什么会得到匿名否决票?这就是在MS Access中模拟行数的方式。