MySQL计算两个日期之间的差异,但有一个扭曲

时间:2012-09-12 17:11:40

标签: mysql sql join datediff

我有两张桌子:ProductUser

Product:
    Date(Datetime)
    Phone_Number(Number).

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

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

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

任何帮助都会非常感激,因为我的查询写作并不可怕,但我无法解决这个问题。

感谢。

3 个答案:

答案 0 :(得分: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.

答案 1 :(得分: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

答案 2 :(得分:0)

如果您只存储一个日期字段,那么您的表格听起来并不一定能够确定创建和取消用户日期之间的差异。但是如果你有2列,你可以使用user.createdDate和user.cancelledDate     SELECT DATEDIFF(user.createdDate,user.cancelledDated)AS DiffDate 我不知道DATEDIFF是否与datetime对象一起使用,我使用了格式为“year-mm-dd”的普通日期,它会给你一个带有DiffDate的Query结果对象,这是一个天数的整数。 如果user.cancelledDate在user.createdDate之前,您将得到一个负整数。