0

私は2つのテーブルを持っています: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を使用して、ユーザーが作成された日付とユーザーがキャンセルされた日付の日付の違い、および作成日とユーザーが製品を持っているかどうか(電話番号でユーザーを製品に一致させることができる)を調べる必要があります。キャンセルの日付。

私のクエリの記述はひどいものではありませんが、これはうまくいきませんので、どんな援助も大歓迎です。

ありがとう。

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

日付フィールドを1つだけ保存している場合、ユーザーが作成された日付とキャンセルされた日付の違いを判断するために必要なデータがテーブルにあるようには思えません。ただし、user.createdDateとuser.cancelledDateの2つの列がある場合は、SELECT DATEDIFF(user.createdDate、user.cancelledDated)AS DiffDateを使用できます。DATEDIFFが日時オブジェクトで機能するかどうかはわかりませんが、プレーンな日付で使用しました。 「year-mm-dd」のようにフォーマットされ、日数の整数であるDiffDateを含むクエリ結果オブジェクトを提供します。user.cancelledDateがuser.createdDateの前にある場合、負の整数を取得します。

于 2012-09-12T17:20:23.907 に答える