Stellen Sie sich vor, ich habe ein Geschäft, das Widgets minutenweise mietet, aber die Mietpreise variieren je nach Wochentag und Tageszeit. Ich beschreibe diese Informationen in einer Tabelle „Preise“ wie folgt:Berechnung Preis basierend auf wechselnden Stundensätzen
CREATE TABLE Rates (
DayNumber int,
HourNumber int,
HourlyRate decimal(19,4),
PRIMARY KEY (DayNumber, HourNumber)
)
DayNumber HourNumber HourlyRate
--------- ---------- ----------
1 1 3.75
1 2 4.50
1 3 4.25
1 4 3.75
In der obigen Tabelle ist der Tag Zahl von datepart(dw, Start)
, die Stundenzahl von datepart(hour, Start)
abgerufen. Es hat 168 Datensätze (die Anzahl der Stunden in einer Standardwoche).
Ich habe die Mietinformation wie in einem „Mieten“ Tabelle folgt:
CREATE TABLE Rentals (
RentalId int,
CustomerId int,
Start datetimeoffset,
Finish datetimeoffset,
Cost decimal(19,4),
PRIMARY KEY (RentalId)
)
RentalId CustomerId Start Finish Cost
-------- ---------- --------------- --------------- ----
1 1 1/1/2016 6:11am 1/1/2016 2:34pm
2 1 1/2/2016 7:23am 1/3/2016 8:12am
Mit T-SQL (SQL Server 2014 oder höher), würde Ich mag Vermietungen Tabelle aktualisieren, die Cost
zu berechnen Spalte, die die Rate jeder Tag-Stunde berücksichtigt, summiert für die gesamte Mietdauer. Bonuspunkte für Effizienz.
Gilt die 'HourNumber' für 24HH Format? Angenommen, die Rate von "HourNumber 4" gilt für 4 Uhr morgens, 4 Uhr nachmittags. oder beides? –
Um die Kosten zu berechnen, möchten Sie den Startpreis für die gesamte Mietdauer verwenden oder den Tarif verwenden, der für alle spezifischen Stunden der Mietdauer gilt? – AXMIM
@JoshPart 'datepart (Stunde, Start)' würde "4" für 4 Uhr und "16" für 4 Uhr zurückgeben. –