如何在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()),而不是输入字符串!
如果我的问题重复,请标记为重复的问题并提供相关的参考。
非常感谢!
答案 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;