0

我正在尝试获取给定日期范围内每天的预订数量及其总价值。

我的桌子看起来像:

BookingId (int)
BookingFare (decimal)
BookingDateTime (datetime)

我只能使用以下方法将 BookingDateTime 转换为日期:

SELECT CONVERT(varchar(8), BookingDateTime, 112) as BookingDateOnly
FROM   [TaxiBookingOnline].[dbo].[Bookings]

我所追求的是这样的:

Date         Bookings   Value
2013-07-10   10         256.24
2013-07-11   12         321.44
2013-07-12   14         311.53

我觉得我应该为表起别名,将其连接到自身,然后使用“GROUP BY”,但我无法让它工作。

任何帮助将非常感激。

谢谢。

4

4 回答 4

2

怎么样

select
   cast(BookingDateTime as date) [Date],
   count(*) [Bookings],
   sum(BookingFare) [Value]
from t
group by cast(BookingDateTime as date)
于 2013-07-22T16:02:31.067 回答
1
SELECT   CONVERT(VARCHAR(8), BookingsDateTime, 112) AS [Date],
         COUNT(*)  AS [Bookings],
         SUM(BookingsFare AS [Value]
FROM     MyTable
GROUP BY DATEADD(dd, 0, DATEDIFF(dd, 0, BookingDateTime))

Group bySELECT DATEADD(dd, 0, DATEDIFF(dd, 0, dateColumn))将有效地获取 的日期部分datetime,然后您可以根据需要在分组值上使用countor 。sum

编辑:如果您使用的是 SQL Server >= 2008,则可以强制转换为date(就像@AlexK 所做的那样),否则您必须使用DATEADD.

于 2013-07-22T16:03:26.850 回答
0

以下是代码。将 Date1 和 Date2 替换为日期范围值:

SELECT 
CONVERT(varchar(8), BookingDateTime, 112) as BookingDateOnly, BookingID   Bookings,Sum(BookingFare)Value  
FROM 
[TaxiBookingOnline].[dbo].[Bookings]
WHERE BookingDateTime Between 'Date1' and 'Date2'
GROUP BY
BookingDateTime,BookingID
于 2013-07-22T16:04:06.637 回答
0
SELECT
    CONVERT(DATE,BookingDateTime) BookingDate,
    COUNT(BookingID) Bookings,
    SUM(BookingFare) BookingFare
FROM TaxiBookingOnline.dbo.Bookings
于 2013-07-22T16:23:48.703 回答