Thay đổi DATEADD
từ ngày này sang tuần khác. Do đó, có hai thay đổi:
dateadd(week, @LastXDays, l_update)
và
dateadd(week, (@LastXDays + 1), @MaxDate)
Trong trường hợp này, tôi cũng sẽ đổi tên @LastXDays
biến thành @LastXWeeks
.
CREATE PROCEDURE [dbo].[spGetPlayingTimeOfthepeoplesPerDay] @email NVARCHAR(50)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @MinDate DATE
,@MaxDate DATE
,@LastXDays INT
SELECT @LastXWeeks = - 15
SELECT @MaxDate = peoples.l_update
FROM peoples
WHERE peoples.email = @email
DECLARE @test TABLE (
quantity VARCHAR(100)
,DATE DATE
,TimePerDay DECIMAL(5, 2)
);
WITH CTE
AS (
SELECT peoples.email
,peoples.l_update
,act.quantity
,act.starttime
,act.endtime
,act.duration AS [Totaltime]
FROM peoples
INNER JOIN MPeoples ON peoples.Id = MPeoples.parent_id
INNER JOIN slines ON MPeoples.id = slines.movesuser_id
INNER JOIN seg ON slines.id = seg.sline_id
INNER JOIN act ON seg.id = act.seg_id
WHERE act.quantity = 'playing'
AND (peoples.email = @email)
GROUP BY peoples.email
,act.quantity
,act.duration
,act.starttime
,act.endtime
,peoples.l_update
)
INSERT INTO @test (
quantity
,DATE
,TimePerDay
)
SELECT quantity
,Cast(starttime AS DATE) AS DATE
,SUM(datediff(second, starttime, endtime)) / 60.0 AS TimePerDay
FROM cte WITH (NOLOCK)
WHERE starttime >= dateadd(week, @LastXWeeks, l_update)
GROUP BY quantity
,cast(starttime AS DATE)
SELECT @MaxDate = @MaxDate
,@MinDate = dateadd(week, (@LastXWeeks + 1), @MaxDate);
WITH AllDates
AS (
SELECT @MinDate AS xDate
UNION ALL
SELECT Dateadd(Day, 7, xDate)
FROM AllDates AS ad
WHERE ad.xDate < @MaxDate
)
SELECT 'playing' AS quantity
,ad.xDate
,Isnull(t.TimePerDay, 0) AS TimePerDay
FROM AllDates AS ad WITH (NOLOCK)
LEFT JOIN @test AS t ON ad.xDate = t.DATE
END
Ngoài ra, một lời khuyên:không sử dụng gợi ý truy vấn (NOLOCK
) nếu bạn không hiểu công dụng của chúng. Trong trường hợp này, sử dụng NOLOCK
có thể có tác động tai hại đến kết quả của bạn.
Dưới đây là một số bài viết mà bạn nên đọc trước khi quyết định xem bạn có tiếp tục sử dụng NOLOCK
không hoặc không.
Thói quen xấu:Đặt NOLOCK ở khắp mọi nơi