php - MySQL JOIN 和 DATE 比较/操作

标签 php mysql sql join phpmyadmin

考虑以下 MySQL 表:


APPLICATIONS(包含所有用户的所有应用程序)

unique_id |  user_id  |  date_of_application  |  date_ended  | status
----------------------------------------------------------------------------
1            user_a          2010-09-09          2010-12-24     Ended
2            user_a          2011-03-03          2011-06-06     Ended
3            user_a          2011-08-08          2011-10-10     Ended
4            user_b          2011-10-01                         Active


*ITEM_TRANSACTIONS*(包含所有用户的所有项目交易)

user_id |  item_id  |  quantity_ordered  |  date_requested  |  date_received
----------------------------------------------------------------------------
user_a      item_a            20              2011-10-01         2011-10-02
user_a      item_b            10              2011-10-01         2011-10-02
user_b      item_a            30              2011-10-05         2011-10-10
user_b      item_b            30              2011-10-05         2011-10-10 


元素

item_id |  item_name  |  item_price
------------------------------------
item_a      Item AA         500
item_b      Item BB         1000


到目前为止,我有以下查询,该查询已经对 distinct per user 的商品价格值求和。

但是,除此之外我还需要的是 SELECT 应该只涵盖(计算总和)那些用户状态为Endeditem transactions 并且申请是最新的。

重申一下,applicationsitem_transactions 表将包含同一用户随着时间的推移的多条记录,应该覆盖(SELECTED)的是最新申请下的那些交易仅限(状态结束)。


SELECT
    item_po.poid,
    SUM(item_transactions.quantity_ordered) AS qtysum,
    item_transactions.item_id,
    item_transactions.quantity_ordered,

    items.item_id,
    items.item_price,

    applications.user_id,
    applications.status

FROM
    items

WHERE
    applications.status='Ended'

GROUP BY
    item_transactions.user_id

最佳答案

要仅为每个用户选择最后结束的应用程序,您可以使用子查询来选择这些应用程序的 ID,并将应用程序表与该子查询连接起来。假设应用程序 ID 按时间顺序排列:

SELECT
  item_po.poid,
  SUM(item_transactions.quantity_ordered) AS qtysum,
  item_transactions.item_id,
  item_transactions.quantity_ordered,
  items.item_id,
  items.item_price,
  applications.user_id,
  applications.status   
FROM
  applications
  NATURAL JOIN (
    SELECT
      MAX(unique_id) AS unique_id
    FROM applications
    WHERE status = 'Ended'
    GROUP BY user_id
  ) AS foo
  /* ... other joins here ... */

但是,我无法从您的描述中确切地弄清楚交易应该如何加入到应用程序中。我假设您可能想要这样的东西:

  JOIN item_transactions
    ON date_requested BETWEEN date_of_application AND date_ended
  NATURAL JOIN items

但我不确定确切的加入条件。 (例如,如果项目在申请期间请求但在结束后交付?或者在申请期间之前请求但在申请期间交付怎么办?)

关于php - MySQL JOIN 和 DATE 比较/操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7708339/

相关文章:

php - 创建一个 php 脚本来使用 Mysql 数据库显示随机图像

SQL 查询对多个表进行 Count()

mysql - 从 json 字段 mysql 中的键、值对列表中提取一个键

php - 制作响应式页面时 jquery.min 文件冲突

php - NL2BR() PHP 问题求助?

php - 定义 Laravel 对象

mysql - 根据白名单表过滤未过滤的表

javascript - 无法使用 jquery 和 php $_GET 导出 html 表

php - 接下来 7 天的生日计数以及每天需要的生日计数和总数

Mysql、SQLite、可扩展性