MySQL创建包含日期最大的所有数据的 View

标签 mysql database select join max

我想创建一个 View ,将数据与图中所示表格中的最大日期相结合。这些应该按 profileID 分组。

Database ERM

profileID 链接到 profile.userID。

我在代码中尝试了不同的方法。堡垒一选择日期为最大值的数据,但连接不起作用。每个 profileID 都将与相同的数据连接。

CREATE 
ALGORITHM = UNDEFINED 
DEFINER = `b91788dd8d05b5`@`%` 
SQL SECURITY DEFINER

查看fitchallengersql1.profileview AS

Select p.userID,
(SELECT 
            `bf`.`bodyFat`
        FROM
            (`fitchallengersql1`.`bodyfatprofile` `bf`
            JOIN `fitchallengersql1`.`profile` `p`)
        WHERE
            ((`bf`.`profileID` = `p`.`userID`)
                AND (`bf`.`date` = (SELECT 
                    MAX(`fitchallengersql1`.`bodyfatprofile`.`date`)
                FROM
                    `fitchallengersql1`.`bodyfatprofile`)))) AS `bodyFat`,
    (SELECT 
            `bw`.`bodyweight`
        FROM
            (`fitchallengersql1`.`bodyweightprofile` `bw`
            JOIN `fitchallengersql1`.`profile` `p`)
        WHERE
            ((`bw`.`profileID` = `p`.`userID`)
                AND (`bw`.`date` = (SELECT 
                    MAX(`fitchallengersql1`.`bodyweightprofile`.`date`)
                FROM
                    `fitchallengersql1`.`bodyweightprofile`)))) AS `bodyWeight`,
    (SELECT 
            `bmi`.`bmi`
        FROM
            (`fitchallengersql1`.`bmiprofile` `bmi`
            JOIN `fitchallengersql1`.`profile` `p`)
        WHERE
            ((`bmi`.`profileID` = `p`.`userID`)
                AND (`bmi`.`date` = (SELECT 
                    MAX(`fitchallengersql1`.`bmiprofile`.`date`)
                FROM
                    `fitchallengersql1`.`bmiprofile`)))) AS `bmi`

        From profile

在第二个中,联接按其应有的方式工作,但我无法找到一种方法来仅选择日期为最大值的数据。

    CREATE 
    ALGORITHM = UNDEFINED 
    DEFINER = `b91788dd8d05b5`@`%` 
    SQL SECURITY DEFINER
VIEW `fitchallengersql1`.`profileview` AS
    SELECT 
        `p`.`userID` AS `userID`,
        `p`.`privacy` AS `privacy`,
        `bs`.`size` AS `bodysize`,
        `bw`.`bodyweight` AS `bodyweight`,
        `bf`.`bodyFat` AS `bodyfat`,
        `bmi`.`bmi` AS `bmi`
    FROM
        ((((`fitchallengersql1`.`profile` `p`
        JOIN `fitchallengersql1`.`bodysizeprofile` `bs`)
        JOIN `fitchallengersql1`.`bodyweightprofile` `bw`)
        JOIN `fitchallengersql1`.`bmiprofile` `bmi`)
        JOIN `fitchallengersql1`.`bodyfatprofile` `bf`)
    WHERE
        ((`p`.`userID` = `bs`.`profileID`)
            AND (`p`.`userID` = `bw`.`profileID`)
            AND (`p`.`userID` = `bmi`.`profileID`)
            AND (`p`.`userID` = `bf`.`profileID`))

希望有人能帮助我。

谢谢!

逃离

最佳答案

希望以下查询能够满足您的需求。请按照模式连接其余表格。请注意,当表增长时,这些肯定会出现性能问题,因为这需要大量处理。

-- Select the columns that you need
select p.*, lbp.*
from profile p
inner join (
        -- get the latest bmiprofile per user profile
        select bp1.*
        from bmiprofile bp1
        inner join (select profileID, max(date) as date from bmiprofile group by profileID) as bp2 on bp1.prfileId = bp2.profileId and bp1.date = bp2.date

    ) as lbp on lbp.ProfileId = p.userId
-- Join the other tables in similar way 

关于MySQL创建包含日期最大的所有数据的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40117883/

相关文章:

php - Magento 分层导航 - 复选框

php - 如何根据另外两个表的计算从一个表中检索数据?

php - 如何检查我的服务器上的 query_cache_type 值

Mysql全文检索查询

mysql - SQL 查询更新一系列字段 - MySQL 表

database - Codeigniter ActiveRecord 不返回特定 tableUn 的任何结果

java - 如何使用 Java 将数据从 4 个文本字段发送到 Netbeans 中的 Derby 数据库

javascript - 使用动态生成的选项为 Select react defaultValue

javascript - 哪个更快?按ID选择,还是按索引选择?

sql - 查询中的 Oracle 字符串比较