【问题标题】:Select products with users选择有用户的产品
【发布时间】:2012-10-18 16:57:54
【问题描述】:

我已经很长时间没有使用 SQL 了,我需要一些基本查询的帮助。我有以下三个表:

  • users (id, name)
  • products (id, name)
  • owners (userid, productid, date)

用户 A 可以将一种产品卖给用户 B,然后再卖给 A。

现在,我想要每个用户当前拥有的所有产品的列表以及交易日期。

目前,我的查询是这个,但我被旧数据困住了(一个产品与一个用户的第一次关联,而不是最新的):

SELECT users.name, products.name, date
FROM products
     JOIN owners ON products.id = owners.id
     JOIN users ON owners.id = user.id
GROUP BY product.id

你有什么提示吗?

谢谢

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您需要添加一个子查询,为每个 productid 获取最新的 date

    SELECT  users.name, 
            products.name, 
            date
    FROM    products
            JOIN owners 
                ON products.id = owners.id
            JOIN users 
                ON owners.id = user.id
            JOIN
            (
                SELECT productID, MAX(Date) maxDATE
                FROM owners
                GROUP BY productID
            ) nw ON owners.productID = nw.productID AND
                    owners.date = nw.maxDAte
    GROUP BY product.id
    

    【讨论】:

      【解决方案2】:

      如果您以降序获取查询,则最后添加的数据将首先看到

      ORDER BY date DESC

      【讨论】:

      • 我试过了,但它只适用于最终结果(在 GROUP BY 之后),并且在之前使用时会引发错误
      • 是的,伙计。因为 SQL Query 块有一些顺序。你不能在 GROUP BY 块之前添加它......你必须在 GROUP BY 语句之后插入它..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-31
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      • 2019-02-26
      相关资源
      最近更新 更多