Как сделать пользовательские недели1, недели2, недели3, недели4, недели в базе данных в зависимости от данных дат? - PullRequest
0 голосов
/ 18 декабря 2018
Employee_Table

eid mydate       Late
1   01/01/2018   2
1   01/02/2018   0
1   01/03/2018   30
1   01/04/2018   4
1   01/05/2018   0
1   01/06/2018   0
1   01/07/2018   3
1   01/08/2018   0 
1   01/09/2018   3
1   01/010/2018  2
1   01/011/2018  10

Select sum(late) as lates from  Employee_Table 
where mydate between '01/01/2018' AND '01/07/2018'    
Group by eid

week1 - 36
week2 - 18
week3 - 00
week4 - 00
week5 - 00

Это моя проблема.Как сделать запрос, который начинается с 1-й недели до N-й недели, в зависимости от заданной даты и времени, которое должно начинаться в воскресенье.

Если первая дата не выпала на воскресенье, дата окончания должна заканчиваться насуббота

week 1 january 01 - 06
week 2 january 07 - 13
week 3 january 14 - 20
week 4 january 21 - 27
week 5 january 28 - 31

Select ?
 as week1 
 as week2
 as week3
 as week4
 as week5
 as weekNth

 from  Employee_Table 
where mydate between '01/01/2018' AND '01/31/2018' 

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Определение недели по умолчанию начинается с воскресенья, поэтому вы можете проверить, есть ли у вас другая конфигурация, отметив

select @@DATEFIRST

Если возвращается 7, то первый день недели - воскресенье.измените это, используя следующую команду FIRSTDATE на SQL Server

SET DATEFIRST

Возможно, вы можете использовать следующее решение на SQL Server, где я использую выражение CTE (я неуверен, что MySQL поддерживает CTE) и таблица чисел SQL

declare @d1 date = '01/01/2018'
declare @d2 date = '12/31/2018'
;with cte as (
    select datepart(wk, @d2) as n
), agg as (
    Select
        eid,
        datepart(wk, mydate) as dp, 
        sum(late) as lates 
    from Employee_Table
    where 
        mydate between @d1 AND @d2
    Group by 
        eid,
        datepart(wk, mydate)
)
Select 
    i, eid, lates
from dbo.NumbersTable(1,datepart(wk, @d2),1) as nt
left join agg
    on i = dp
order by i, eid
0 голосов
/ 18 декабря 2018

Вы можете использовать функцию MySQL WEEK () для определения текущей недели.Таким образом, ваш SQL-оператор будет выглядеть следующим образом:

SELECT WEEK(mydate), SUM(lates)
FROM Employee_Table
GROUP BY WEEK(mydate)

Если вы хотите указать точный вывод, то есть «weekX» для номера недели:

SELECT CONCAT('week', WEEK(mydate)), SUM(lates)
FROM Employee_Table
GROUP BY WEEK(mydate)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...