如何在ms sql中从当前日期的不同时间获取数据

时间:2016-05-17 18:26:50

标签: sql-server

如何在MS-SQL中使用select语句从当前日期的不同时间获取数据?

我有一个包含3列的表:Id,name,dateFinished; name列将按不同的时间段添加。 例如:

//假设今天是2016年5月17日 Id = 1,name = A,dateFinished =' 17/05/2016 08:00&#39 ;;
Id = 2,name = A,dateFinished =' 17/05/2016 10:00';
Id = 3,name = A,dateFinished =' 17/05/2016 12:00';
Id = 4,name = B,dateFinished =' 17/05/2016 09:00&#39 ;;
Id = 5,name = C,dateFinished =' 17/05/2016 10:00';
Id = 6,name = B,dateFinished =' 17/05/2016 11:00';

//当时间过去时,记录将按姓名人员更新。

根据上表,如果我们检查08:00 to 10:00之间的范围。我们可以看到Name A人有两次完成时间,B人和C人只有一个完成时间。

我的观点是如何计算当前日期不同时间范围内人物的日期完成时间?

//问题已更新 我想要的输出表将是:

名称------- 08 AM-10AM(总计已完成)------- 10 AM-12PM
A ------- ------- 2 1
乙------- ------- 1 1
Ç------- ------- 1 0

并且查询必须使用当前日期方法(例如GETDATE()),而不是输入字符串!

如果我的问题重复,请标记为重复的问题并提供相关的参考。

非常感谢!

3 个答案:

答案 0 :(得分:0)

<强> SQL Fiddle Demo

SELECT [name], COUNT([name]) as Total
FROM Table1
WHERE dateFinished BETWEEN '05/17/2016 08:00' AND '05/17/2016 10:00'
GROUP BY [name]

<强>输出

| name | Total |
|------|-------|
|    A |     2 |
|    B |     1 |
|    C |     1 |

答案 1 :(得分:0)

select 
   name,
   convert(nvarchar(12),
   dateFinished,101) AS [DATE],
   count(name) AS TOTAL 
from 
   **TABLE NAME**
group by 
   name, 
   convert(nvarchar(12),dateFinished,101)

输出

    | name | date      | total       
    |    A | 05/17/2016| 2
    |    B | 05/17/2016| 1

答案 2 :(得分:0)

我不确定我到底知道你到底发生了什么 - 这看起来像是这样吗?

Name | Date       | 8am | 9am | 10am | 11am | 12pm
A    | 17/05/2016 | 1   | 0   | 1    | 0    | 1
B    | 17/05/2016 | 0   | 1   | 0    | 1    | 0
C    | 17/05/2016 | 0   | 0   | 1    | 0    | 0

...

以下是获得该方法的方法:

SELECT 
   myName, 
   myDate, 
   [0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23]
FROM
    (
        SELECT
           ID,
           Name as myName, 
           Convert(varchar,date_finished,112) as myDate, 
           DATEPART(HOUR, date_finished) as myHour 
        FROM 
           Production.Product
    ) AS SourceTable
PIVOT
    (
       COUNT(ID)
       FOR myHour IN ([0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23])
    ) AS PivotTable;