0

我有 2 张桌子:Product, User.

Product:
    Date(Datetime)
    Phone_Number(Number).

User: 
    Date (Datetime)
    Phone_Number(Number)
    Type(Value of N or C).

当一个新用户被添加到User表中时,它会被赋予一个日期、电话号码和“N”值(N 表示新用户)。当用户被取消时,会给出一个日期、电话号码和“C”值(C 表示已取消)。

使用 MySQL,我需要找出用户创建日期和用户被取消日期之间的日期差异,以及他们在创建日期和创建日期之间是否有产品(可以通过电话号码将用户与产品匹配)取消日期。

任何帮助将不胜感激,因为我的查询写作并不糟糕,但这我无法解决。

谢谢。

4

3 回答 3

1
SELECT
    /* Anything you want from the User table */
    /* CASE statement that checks if prod.phone_number is not null which means a product was present */
FROM
    User user_new
    JOIN User user_can
    ON user_new.phone_number = user_can.phone_number
    LEFT JOIN Product prod
    ON prod.phone_number = user_new.phone_number
WHERE
    (prod.Date IS NULL) OR -- Either there was no record.
    (prod.Date BETWEEN user_new.Date AND user_can.Date) -- or a product existed between the two dates.
于 2012-09-12T17:18:10.673 回答
1

您需要首先自联接 User 表以查找创建和取消的日期。然后加入 Product 表以查看是否有任何内容。

SELECT u.Phone_Number, u.Created, u.Cancelled, p.Date as 'ProductDate'
FROM (
    SELECT u1.Phone_Number, u1.Date as 'Created', u2.Date as 'Cancelled'
    FROM User u1
      JOIN User u2 on u1.Phone_Number=u2.Phone_Number
    WHERE u1.Type = 'N'
      and u2.Type = 'C'
  ) u
  LEFT JOIN Product p on u.Phone_Number = p.Phone_Number
                     and p.Date between u.Created and u.Cancelled
于 2012-09-12T17:19:55.113 回答
0

如果您只存储一个日期字段,听起来您的表将没有必要的数据来确定用户创建日期和取消日期之间的差异。但是,如果您有 2 列 user.createdDate 和 user.cancelledDate 您可以使用 SELECT DATEDIFF(user.createdDate, user.cancelledDated) AS DiffDate 我不知道 DATEDIFF 是否适用于日期时间对象,我已经将它与普通日期一起使用格式为“year-mm-dd”,它将为您提供一个带有 DiffDate 的查询结果对象,这是天数的整数。如果 user.cancelledDate 在 user.createdDate 之前,你会得到一个负整数。

于 2012-09-12T17:20:23.907 回答