Как посчитать количество дней? - PullRequest
1 голос
/ 13 октября 2009

Использование SQL Server 2005

Таблица1

ID FromDate ToDate

001 23-02-2009 25-02-2009
001 27-02-2009 29-02-2009
002 12-02-2009, 25-03-2009

...

Table2

ID Name Total

001 Raja 30
002 Ravi 22

Я хочу получить общее количество дней для человека

Пробный запрос,

SELECT
   table2.Id, table2.name, table2.total, 
   datediff(day, table1.fromdate, table2.todate) 
FROM table1 
LEFT OUTER JOIN table2 ON table1.personid = table2.personid

Получение выходных данных

ID Name Total Days

001 Raja 30 3
001 Raja 30 3
...,

Он должен содержать общее количество дней и отображаться в одной строке,

Примечание. Предположим, что я выбираю конкретную дату периода, она должна отображать только эти дни

Например

где дата между 26-02-2009 по 03-03-2009, должна отображаться

ID Name Total Days

001 Raja 30 3
...,

Потому что беру дату после 25-02-2009,

Expected Output

ID Name Total Days

001 Raja 30 6
002 Ravi 22 16

Как изменить мой запрос?

Ответы [ 3 ]

0 голосов
/ 13 октября 2009

Я думаю, что запрос GROUP BY будет проще:

SELECT table2.Id, table2.name, table2.total, 
SUM(DATEDIFF(day, table1.fromdate, table1.todate)) AS Days
FROM table1 
left outer join table2 on 
table1.personid = table2.personid
GROUP BY table2.Id, table2.name, table2.total
0 голосов
/ 13 октября 2009

DATEDIFF дает разницу в количестве дней между двумя датами, поэтому аналогичным образом разница между 1 и 3 равна 2 (3 - 1 = 2), DATEDIFF (d) фактически равна D2 - D1. Таким образом, чтобы компенсировать дополнительный день, который вы хотите посчитать, вам нужно DATEADD день, чтобы либо (ToDate, либо FromDate) сместить ваши даты:

SELECT table2.id, table2.Name, table2.Total, SUM(DATEDIFF(d, DATEADD(d, -1, table1.FromDate), table1.ToDate))
    FROM table1
        INNER JOIN table2 ON table1.id = table2.id
    GROUP BY table2.id, table2.Name, table2.Total
0 голосов
/ 13 октября 2009
SELECT  table2.Id, table2.name, table2.total,
        COALESCE(
        (
        SELECT  SUM(DATEDIFF(day, table1.fromdate, table1.todate) + 1)
        FROM    table1
        WHERE   table1.personid = table2.personid
        ), 0) AS [days]
FROM    table2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...