这是我在这里的第一篇文章,因为大部分时间我已经找到了合适的解决方案:)
但是这次似乎没有任何帮助
我试图从一些mysql数据库迁移信息我只有只读访问权限。
我的问题与此类似:
Group by doesn't give me the newest group
我还需要从一些表中获取最新信息,但我的表有> 300k条目,因此检查“time-attribute-value”是否与子查询中的相同(如第一个答案中建议的那样)会太慢(一旦我做了“......在哪里......”并且服务器挂了)。
除此之外,我几乎找不到单个属性中的重要信息(例如时间),并且从来没有一个主键。
到目前为止我做的就像在第二个答案中通过加入子查询那样建议包含最新的“时间属性输入”和一些主键,但在使用多个连接和联合结果后,这让我陷入了巨大的混乱。
因此,我更喜欢使用这里的语句:
Select entry with maximum value of column after grouping
但当我尝试并寻找一个好的候选人作为“时间属性”时,我注意到这个查询给了我两个不同的结果(更多= 39721,更少= 37870)
SELECT COUNT(MATNR) AS MORE
FROM(
SELECT DISTINCT
LAB_MTKNR AS MATNR,
LAB_STG AS FACH,
LAB_STGNR AS STUDIENGANG
FROM
FKT_LAB
) AS TEMP1
SELECT COUNT(MATNR) AS LESS
FROM(
SELECT
LAB_MTKNR AS MATNR,
LAB_STG AS FACH,
LAB_STGNR AS STUDIENGANG,
LAB_PDATUM
FROM
FKT_LAB
GROUP BY
LAB_MTKNR,
LAB_STG,
LAB_STGNR
HAVING LAB_PDATUM = MAX(LAB_PDATUM)
)AS TEMP2
虽然两者都应用于同一个表格并在相同的条目上使用“GROUP BY”/“SELECT DISTINCT”。
任何想法?
如果没有任何帮助,我必须回到我的混乱中,我将使用字符串变量作为占位符来整理它,但后来我在一个查询中丢失了多少子查询,连接和联合的概述...有多少个临时表将服务器能够应付?
答案 0 :(得分:2)
您的第二个查询未按预期执行操作。这是查询:
SELECT COUNT(MATNR) AS LESS
FROM (SELECT LAB_MTKNR AS MATNR, LAB_STG AS FACH, LAB_STGNR AS STUDIENGANG, LAB_PDATUM
FROM FKT_LAB
GROUP BY LAB_MTKNR, LAB_STG, LAB_STGNR
HAVING LAB_PDATUM = MAX(LAB_PDATUM)
) TEMP2;
问题是having
子句。您正在将未聚合的列(LAB_PDATUM
)与聚合值(MAX(LAB_PDATAUM)
)混合。 MySQL所做的是为列选择任意值,并将其与最大值进行比较。
通常,任意值不是最大值,因此行被过滤。您提供的参考(尽管已接受的答案)不正确。我在那里发表评论。
如果您想要最新的价值,这是一个相对简单的方法:
SELECT COUNT(MATNR) AS LESS
FROM (SELECT LAB_MTKNR AS MATNR, LAB_STG AS FACH, LAB_STGNR AS STUDIENGANG,
max(LAB_PDATUM) as maxLAB_PDATUM
FROM FKT_LAB
GROUP BY LAB_MTKNR, LAB_STG, LAB_STGNR
) TEMP2;
但是,它不会影响外部计数。