je cherchais dans les questians passées et ne pouvait pas trouver ce que je cherchais, dans mon application web que je dois obtenir tous les enregistrements dans le tableau de commande où les ordres où les commandes dans un changement certian:Comment avoir un temps entre deux dates quand elles ne sont pas dans la même journée?
Un décalage a une date d'ouverture uniquement et un ID d'enregistrement dans shiftTypes.
shiftTypes tient le temps de début et de fin d'un quart de travail (implicitement)
Maintenant, les gens travaillent avec le système tout le temps et ils pourraient entrer dans une matinée du matin et aujourd'hui yestorday de commande.
Certains quarts de travail ont lieu la nuit, de sorte que certains ordres de ce quart de travail sont en un jour et d'autres dans l'autre. Mon problème est que quand j'essaie d'obtenir seulement les ordres dans un quart de travail, je reçois tous les records des deux jours dans le temps d'un quart (par type de quart) mais pour le mauvais décalage aussi (Celui qui était hier soir par exemple) ... bien sûr cela arrive, et cela ne peut arriver que pour les quarts de nuit et s'étend sur deux jours différents, car les deux jours ont les mêmes heures en eux ....
Comment puis-je obtenir uniquement les enregistrements qui sont sur mon quart de travail? p.s. par shiftId ne fonctionne pas ....
----DEMO: spShiftCloseZ @Date='2010-10-11'
alter procedure spShiftCloseZ
@Date date
as
declare @ShiftID smallint
declare @ShiftDate date
declare @StartTime time(7)
declare @EndTime time(7)
set @ShiftID = (select top 1 ShiftID from dbo.Shifts order by ShiftID desc)
set @ShiftDate = (select ShiftDate from dbo.Shifts where ShiftID = @ShiftID)
set @StartTime = (select StartTime from dbo.Shifts s,dbo.ShiftTypes st
where s.ShiftTypeID=st.ShiftTypeID and ShiftID = @ShiftID)
set @EndTime = (select EndTime from dbo.Shifts s,dbo.ShiftTypes st
where s.ShiftTypeID=st.ShiftTypeID and ShiftID = @ShiftID)
select OrderID,
Total
from dbo.Orders
where OrderDate between @ShiftDate and @Date
--and
--OpenTime between @StartTime and @EndTime
select SUM(NumOfDiners) as NumOfDiners,
SUM(Total) as TotalAmount,
OrderDate
from dbo.Orders
where OrderDate between @ShiftDate and @Date
and
OpenTime between @StartTime and @EndTime
group by OrderDate
10 :-)
10x :-) comme vous pouvez le voir, j'ai résolu le problème, mais je vous remercie pour l'effort :-) Je suppose que je devais poser le questian, et fumer une cigaret pour obtenir la tête claire ...:-) – Erez
+1, 'Vous devez créer des valeurs de date et heure de début et de fin, si vous avez la date et l'heure séparées, vous devez faire des comparaisons beaucoup plus compliquées pour le faire fonctionner. –