Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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
SQLite3。使用FKs、MAX()和GROUP BY仅选择最高版本 关于架构和数据,您需要了解的是:_Sql_Sqlite - Fatal编程技术网

SQLite3。使用FKs、MAX()和GROUP BY仅选择最高版本 关于架构和数据,您需要了解的是:

SQLite3。使用FKs、MAX()和GROUP BY仅选择最高版本 关于架构和数据,您需要了解的是:,sql,sqlite,Sql,Sqlite,工作日表格包括: id INTEGER, revision INTEGER, .... PRIMARY KEY(id, revision) id -- integer primary key, quite unimportant I think businessday_id -- FK businessday_revision -- FK, when a day is edited, a new revision is created 收

工作日表格包括:

id INTEGER,
revision INTEGER,
....
PRIMARY KEY(id, revision)
id                    -- integer primary key, quite unimportant I think
businessday_id        -- FK
businessday_revision  -- FK, when a day is edited, a new revision is created
收入表包括:

id INTEGER,
revision INTEGER,
....
PRIMARY KEY(id, revision)
id                    -- integer primary key, quite unimportant I think
businessday_id        -- FK
businessday_revision  -- FK, when a day is edited, a new revision is created
外键如下所示:

FOREIGN KEY(businessday_id, businessday_revision) REFERENCES businessday(id, revision) ON DELETE CASCADE,
问题 我只想选择每天最新修订的收入应该是308行。 但可悲的是,我太笨了,想不出来。我发现我可以使用以下工具获得所有最新的工作日修订版:

SELECT id, MAX(revision)
FROM businessday
GROUP BY id;
有什么方法可以用这些数据来选择我的收入吗?大致如下:

-- Pseudo-code:
SELECT *
FROM income i
WHERE i.businessday_id = businessday.id THAT EXISTS IN
    (SELECT id, MAX(revision)
    FROM businessday
    GROUP BY id);
我显然没有线索,请告诉我正确的方向

使用join怎么样

SELECT  i.*
FROM    income i
        INNER JOIN
        (
            SELECT  id, MAX(revision) revision
            FROM    businessday
            GROUP   BY id
        ) s ON i.businessday_id = s.id AND
                i.businessday_revision = s.revision
这应该起作用:

SELECT i.*
FROM Income i
    INNER JOIN (
        SELECT id, MAX(revision) maxrevision
        FROM businessDay
        GROUP BY id
    ) t ON i.businessday_id = t.id AND i.businessday_revision = t.maxrevision

哇,我很惊讶。在短短的几秒钟内,您就可以将正在工作的SQL输入到我已经花了几个小时的东西上。谢谢。@ippi——没问题,很高兴我能帮忙!