【问题标题】:SQL - ordering left joins and main resultsSQL - 排序左连接和主要结果
【发布时间】:2012-01-24 01:35:25
【问题描述】:

我目前正在尝试从数据库中返回所有工程师。除此之外,还有其他一些用户信息。但我希望 ac 表加入最近的行,然后按联系人姓名对主要结果进行排序。

谁能把我扔到正确的方向?

SELECT 
    mb.type, mb.contactname, mb.id, mb.inv_addressline2, mb.inv_addressline3, mb.signup_date,
    fb.engineer_id, fb.job_id, fb.neg_or_pos, fb.rating, fb.author_id,
    ac.engineer_id, ac.timestamp, ac.author_id,
    jb.job_id, SUBSTRING(jb.job_description, 0, 200) AS `short_description`, jb.timestamp 
FROM " . MEMBERS_TABLE . " AS mb 
LEFT JOIN " . ACCEPTED . " AS ac ON mb.id = ac.engineer_id 
LEFT JOIN " . FEEDBACK . " AS fb ON ac.job_id = fb.job_id 
LEFT JOIN " . JOBS . " AS jb ON fb.job_id = jb.job_id 
WHERE mb.type = 2 
GROUP BY mb.contactname 
ORDER BY ac.timestamp DESC

【问题讨论】:

    标签: sql sql-order-by left-join


    【解决方案1】:

    最后想通了:

    SELECT 
        res.type, res.contactname, res.id, res.inv_addressline2, res.inv_addressline3, res.signup_date,
        res.engineer_id_global, res.job_id_global, res.neg_or_pos, res.rating, res.author_id_global,
        res.timestamp_global, res.job_description               
    FROM
        (
            SELECT
                mb.type, mb.contactname, mb.id, mb.inv_addressline2, mb.inv_addressline3, mb.signup_date,
                fb.engineer_id AS `engineer_id_global`, fb.timestamp AS `timestamp_global`, fb.job_id AS `job_id_global`, fb.neg_or_pos, fb.rating, fb.author_id AS `author_id_global`,
                ac.engineer_id, ac.timestamp, ac.author_id,
                jb.job_id, jb.job_description 
            FROM
                " . MEMBERS_TABLE . " AS mb 
            LEFT JOIN
                " . ACCEPTED . " AS ac 
            ON
                mb.id = ac.engineer_id 
            LEFT JOIN 
                " . FEEDBACK . " AS fb 
            ON 
                ac.job_id = fb.job_id 
            LEFT JOIN
                " . JOBS . " AS jb 
            ON 
                 fb.job_id = jb.job_id 
            WHERE 
                mb.type = 2 
            ORDER BY
                fb.timestamp DESC
        ) AS res 
    GROUP BY 
        res.contactname
    ORDER BY
        res.contactname
    

    干杯

    编辑

    以上方法现在有效!

    【讨论】:

    • 或许你也不应该提供建议?
    【解决方案2】:

    因此,仅从 ac 中选择时间戳为该组最大值的行;然后按联系人姓名排序。

    这是一个查询,用于匹配每个工程师和她的最大时间戳:

    SELECT engineer_id, max(timestamp) as latest
    FROM ac
    GROUP BY engineer_id;
    

    然后只选择 (id,timestamp) 在此表中的行。

    【讨论】:

      猜你喜欢
      • 2014-08-04
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      • 2019-05-11
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      相关资源
      最近更新 更多