4

私がやろうとしていることの広い視野は、予約が予約された日付までに、システム全体でまだ発生していない予約がいくつあるかを調べることです。redemption_dateこれは、 after または equal tobooking_dateでグループ化された存在するすべてのレコードの数をカウントすることを意味しbooking_dateます。より良い説明については、次の架空の例を参照してください。

redemption_date      booking_date
2013-01-01           2013-01-01
2013-01-06           2013-01-01
2013-01-06           2013-01-01
2013-01-07           2013-01-02
2013-01-08           2013-01-03
2013-01-09           2013-01-04
2013-01-10           2013-01-05
2013-01-10           2013-01-05
2013-01-10           2013-01-05
2013-01-10           2013-01-05
2013-01-10           2013-01-05
2013-01-11           2013-01-05

結果が欲しい:

booking_date         number_of_reservations
2013-01-01           3
2013-01-02           3
2013-01-03           4
2013-01-04           5
2013-01-05           11

しかし、私の脳は、クエリをどのように構成する必要があるかについて完全に失敗しています。任意のヒント?ありがとう!

編集: 明確にするために、 number_of_reservations は、その日に予約された予約の数と、それ以降の日に予約された予約の数である必要があります。つまり、number_of_reservations は、booking_date の時点でデータベースにある (まだ発生していない) 予約の数です。私の元の結果には間違いがありました。混乱させて申し訳ありません

4

5 に答える 5

11
SELECT
    booking_date,
    COUNT(
        CASE WHEN redemption_date >= booking_date 
        THEN 1 END
    ) AS number_of_reservations
FROM
    Reservations
GROUP BY
    booking_date

SQLフィドル


編集:

更新された説明に基づいて、これにより望ましい結果が得られるはずです。

SELECT DISTINCT
    r."booking_date",
    (SELECT COUNT(*) 
     FROM reservations r2 
     WHERE 
         r2."booking_date" <= r."booking_date"
         AND r2."redemption_date" >= r."booking_date"
    ) AS number_of_reservations
FROM
    Reservations r
ORDER BY r."booking_date"

SQLフィドル

于 2013-02-20T18:44:47.140 に答える
4

caseを使用すると、これを簡単に行うことができますsum

select booking_date,
       SUM(case when redemption_date >= booking_date then 1 else 0 end)
from bookings b
group by booking_date
order by booking_date

ちなみにこれは累計ではありません。の構文は次のとおりです。

sum(whatever) over (partition by . . . order by . . . )

すべての行に計算された値が配置されます。

于 2013-02-20T18:44:03.620 に答える
2

これにより、探しているものが得られるはずです

SELECT booking_date, SUM(CASE WHEN booking_date >= redemption_date THEN 1 ELSE 0 END) AS number_of_reservations
FROM yourtable
GROUP BY booking_date
ORDER BY booking_date
于 2013-02-20T18:45:12.707 に答える
1

これを試してください(特定の数を超えて表示されるものではなく、すべてが必要であると想定しています)

select booking_date, count(*) as number_of_reservations
from table_name
group by booking_date order by booking_date
于 2013-02-20T18:44:28.997 に答える