【问题标题】:SQLite passing multiple parameter in WHERESQLite 在 WHERE 中传递多个参数
【发布时间】:2013-12-12 01:31:02
【问题描述】:

我有这个在 MYSQL 中运行但不会在 SQLite 中运行的查询。我认为它失败是因为 WHERE 子句中的多个参数。

目的是为所有调查问题 (sqid) 选择唯一的最新调查答案(所说),因为一个问题可能有多个答案。

SELECT sqid, said, saname, satimestamp
FROM surveyanswer 
WHERE (sqid, hoid, satimestamp) IN (
    SELECT sqid, hoid, max(satimestamp) as satimestamp
    FROM surveyanswer
    GROUP BY sqid
)

我已经尝试按 satimestamp 排序,并选择了一个限制而不是最大值,但无法使其正常工作。

【问题讨论】:

标签: mysql sql sqlite join subquery


【解决方案1】:

您可以通过加入来做到这一点:

SELECT sqid, said, saname, satimestamp
FROM surveyanswer A
JOIN (
    SELECT sqid, hoid, max(satimestamp) as satimestamp
    FROM surveyanswer
    GROUP BY sqid
) B ON A.sqid = B.sqid and A.hoid = B.hoid and A.satimestamp = B.satimestamp

这在功能上类似于您的原始 SQL,但由于您只关心时间,我相信这也可以:

SELECT sqid, said, saname, satimestamp
FROM surveyanswer A
JOIN (
    SELECT max(satimestamp) as satimestamp
    FROM surveyanswer
) B ON A.satimestamp = B.satimestamp

【讨论】:

    【解决方案2】:

    您似乎没有将hoid 字段用于任何事情。所以,我删除了它。以下是否会产生您正在寻找的东西:

    SELECT sa.sqid, sa.said, sa.saname, sa.satimestamp
    FROM surveyanswer sa
    WHERE sa.satimestamp IN (
        SELECT max(subsa.satimestamp)
        FROM surveyanswer subsa
        WHERE sa.sqid = subsa.sqid
    )
    

    如果 hoid 字段需要包含在 where 子句中,请尝试以下操作:

    SELECT sa.sqid, sa.said, sa.saname, sa.satimestamp
    FROM surveyanswer sa
    WHERE sa.satimestamp IN (
        SELECT max(subsa.satimestamp)
        FROM surveyanswer subsa
        WHERE sa.sqid = subsa.sqid
        AND sa.hoid = subsa.hoid
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-20
      • 2012-07-30
      相关资源
      最近更新 更多