【问题标题】:How to do this query?这个查询怎么做?
【发布时间】:2010-05-16 11:06:09
【问题描述】:

我有一个包含这些列的 mysql 表:

  • ID(自动递增)
  • ID_BOOK(整数)
  • 价格(双倍)
  • 数据(日期)

我知道两个 ID_BOOK 值,例如 1 和 2。

查询:

我必须提取所有 PRICEID_BOOK=1 和 ID_BOOK=2)其中 DATA 一样!

表格示例:

1  1  10.00  2010-05-16

2  1  11.00  2010-05-15

3  1  12.00  2010-05-14

4  2  18.00  2010-05-16

5  2  11.50  2010-05-15

结果示例:

1  1  10.00  2010-05-16

4  2  18.00  2010-05-16

2  1  11.00  2010-05-15 

5  2  11.50  2010-05-15

ID_BOOK=2 没有2010-05-14 所以我跳了。

非常感谢!

【问题讨论】:

  • 请贴出你目前写的代码。人们通常不喜欢只为您编写代码。
  • DATA 这个名字是故意的吗?它是一个日期类型。它应该根据它所代表的内容命名,例如,PURCHASE_DATE

标签: sql select mysql


【解决方案1】:

我猜测您希望如何对结果进行排序,您需要将 myTable 替换为您的表的实际名称。

SELECT *
FROM myTable
WHERE DATA IN
(
    SELECT
        DATA
    FROM myTable
    GROUP BY
        DATA
    HAVING COUNT(*) > 1
)
ORDER BY
    DATA DESC,
    ID_BOOK,
    ID

【讨论】:

    【解决方案2】:
    select PURCHASE_DATE, PRICE from table group by PURCHASE_DATE
    

    【讨论】:

    • 您需要将PRICE 包装在一个聚合函数中才能正常工作。它还会返回 Damiano 想要跳过的日期为 2010-05-14 的行,因为该日期只有一行。
    【解决方案3】:

    这将为您提供稍微不同的结果格式,但它可能有用:

    Select 
    t1.id as t1_id, t1.id_book as t1_id_book, t1.price as t1_price, t1.data as t1_data,
    t2.id as t2_id, t2.id_book as t2_id_book, t2.price as t2_price, t2.data as t2_data
    from table t1
    inner join table t2 on t1.data = t2.data
    and t1.id_book = 1
    and t2.id_book = 2
    

    你会得到:

    1  1  10.00  2010-05-16  4  2  18.00  2010-05-16
    2  1  11.00  2010-05-15  5  2  11.50  2010-05-15
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-30
      • 2011-07-01
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      • 2016-12-13
      • 2013-04-01
      • 1970-01-01
      相关资源
      最近更新 更多