0

以下の形式で mysql データベースにテーブル予約があります。

id | customer_id | user_id | date_booked
1  | 1           | 1       | 2012-11-5

特定のユーザーの顧客数を取得したい。だから私はクエリを書いた

select count(*), user_id, customer_id,date_booked from reservations where user_id=1 group by customer_id

これにより、目的の方法で結果が取得されます。しかし、 date_booked 、記録された最初の値を取得します。つまり、id 2 の顧客に 4 つのレコードがある場合、最初のレコードの date_booked 値をフェッチします。最新の値が欲しいので、以下のようにクエリを改善しました

select count(*), user_id, customer_id,max(date_booked) from reservations where user_id=1 group by customer_id

これにより、記録された最高の日付が取得されます。これはまだ取得したい結果セットではありません。最新の日付が必要ですが、それは現在の日付 (今日) よりも小さい必要があります。

このような条件を書く方法はありますか

max(date_booked)<date(now())

最大の日付を取得したいが、今日よりも短い。これを CakePHP で実現したいと考えています。クエリを手伝ってくれる人がいれば、cakePHP 形式で書くことができます。

必要に応じて質問を改善してください。

4

3 に答える 3

1
select  count(*),a.user_id,a.customer_id,
   IF(max(a.date_booked)>now(), b.date_booked, max(a.date_booked)) as date_booked
from reservations a left join 
   (select max(date_booked) as date_booked,customer_id 
        from reservations where date_booked < now() group by customer_id) b
on a.customer_id=b.customer_id
where a.user_id=1 
group by customer_id
于 2012-11-05T09:37:28.840 に答える
1

これを試して:

select count(*), user_id, customer_id,max(date_booked) 
from reservations 
where user_id=1 
and date_booked<date(now())
group by customer_id
于 2012-11-05T09:20:13.700 に答える
1
select count(*), 
       rs.user_id, 
       rs.customer_id,
       CASE WHEN max(rs.date_booked)<date(now()) then max(rs.date_booked) 
           else (select max(r.date_booked) from reservations r where r.user_id=rs.user_id 
                  and r.date_booked<date(now()) and r.customer_id=rs.customer_id
                  ) end as latestdate
from reservations rs 
where rs.user_id=1 
group by rs.customer_id
于 2012-11-05T09:27:33.010 に答える