我有两张桌子: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,我需要找出用户创建日期和用户被取消日期之间的日期差异,以及他们是否有产品(可以通过电话号码将用户与产品匹配)之间的日期差异创建和取消的日期。
任何帮助都会非常感激,因为我的查询写作并不可怕,但我无法解决这个问题。
感谢。
答案 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之前,您将得到一个负整数。