2012-06-28 6 views
-2

Мне нужно получить общее количество времени, проведенного в SQL, любые идеи?Как получить общее количество времени в sql

Это простой пример моего запроса.

`SELECT 
    A.INDX, B.CLIENTNAME, C.PROJECTNAME, D.NAME, 
    CONVERT(CHAR(10), A.CDATE, 101) [DATE], 
    CONVERT(TIME(0), A.START_TIME, 108) [START], 
    CONVERT(TIME(0), A.END_TIME, 108) [END], 
    CONVERT(TIME(0), (A.END_TIME - A.START_TIME), 108) [HOURS_WORKED] 
FROM 
    LOGSHEET A, CLIENTS B, PROJECTS C, DEVELOPERS D 
WHERE B.CLIENTNO = 1 
    AND C.PROJECTID = 11 
    AND D.USERID = 1` 

Всего должно быть под отработанному

уронил logsheet стол

`BEGIN CREATE TABLE [dbo].[LOGSHEET](
[INDX] [int] IDENTITY(1,1) NOT NULL, 
[CLIENTNO] [int] NULL, 
[PROJECTID] [int] NULL, 
[USERID] [int] NULL, 
[CDATE] [datetime] NULL, 
[START_TIME] [datetime] NULL, 
[END_TIME] [datetime] NULL) ON [PRIMARY]END GO` 

в основном то, что мне нужно

имя | время начала | Время окончания | Hours_worked |

AJ ...... | 07:00:00 | 07:15:00 | 00:15:00 |

AJ ..... | 07:00:00 | 07:15:00 | 00:15:00 |

  Total: |00:30:00| 
+1

Вы вообще не присоединяетесь к своим столам ..... вы действительно хотите декартовой продукт между всеми этими таблицами? –

+1

Я бы согласился - прекратите использование старомодных объединений (пожалуйста, прочитайте: http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style- joins.aspx). И что, если start_time -> end_time пересекает полночь? –

+0

извините за то, что не присоединились к столам, это очень юный проект, который еще только приблизился к планированию, и времена Аарона не пройдут за полночь, поскольку это небольшое офисное приложение только для торговых часов вроде 07: 00-16: 30 –

ответ

0

Хорошо хорошо я понял, в решение моей проблемы, просто добавив поле «МИНУТЫ» и выполнив запрос из C#

if (e.CommandName == "Stop") { 
    int row = int.Parse(e.CommandArgument.ToString()); 
    string indx = GridView1.Rows[row].Cells[1].Text; 
    string s = null; 
    s = "UPDATE LOGSHEET "; 
    s += "SET MINUTES = (DATEPART(HOUR,TIME_SPENT)*60)+(DATEPART(MINUTE,TIME_SPENT)) "; 
    s += "WHERE INDX = @p0 "; 


    String[] pr = new String[1]; 
    pr[0] = indx; 

    cQ.execSql(s, pr); 

    } 
} 

ведьма дает мне минуты, как межд, а затем просто запустить

protected string GetTotal() { 
    string userid = Session["id"].ToString(); 
    string s = null; 


    s = "SELECT SUM(MINUTES) "; 
    s += "FROM LOGSHEET "; 
    s += "WHERE USERID = @p0 "; 

    String[] pr = new String[1]; 
    pr[0] = userid; 

    return cQ.GenQuery(s, pr); 
} 

следуют

label5.text = GetTotal(); 

и KABOOM сделал сумму всего времени, проведенного в минутах proble м решена

это C# программа, но мне нужно было запросов SQL, чтобы решить его

благодаря людям, которые помогли !!

0
DECLARE @start_time DATETIME, @end_time DATETIME; 

SELECT @start_time = '20120621 22:05', @end_time = '20120622 06:47'; 

SELECT CONVERT(TIME(0), DATEADD(MINUTE, DATEDIFF(MINUTE, @start_time, @end_time), 0)); 

Результат:

08:42:00 

Так что, если у вас есть данные в таблице, было бы очень похоже:

SELECT CONVERT(TIME(0), DATEADD(MINUTE, 
    DATEDIFF(MINUTE, A.start_time, A.end_time), 0)) AS [HOURS_WORKED] 
FROM ... 

Вы должны держаться подальше от таких вещей, как добавление и вычитание типов даты и времени и использование встроенных функций, таких как DATEADD. Эта стенография работает с datetime/smalldatetime, но может быть проблематичной с новыми типами.

+0

. что СЕЙЧАС и в следующий раз, но теперь вопрос еще в том, как я могу добавить общее время в отработанном времени? –

+0

Вам необходимо предоставить образцы данных и желаемые результаты. Я не могу сказать из вашего фальшивого запроса, что означает «общее время». См. Http: //dba.blogoverflow.com/2012/06/help-us-help-you/ –

+0

прямо как я могу получить SUM из [HOURS_WORKED]? в нем указано недопустимое имя столбца. –

Смежные вопросы