不同的子查询
Sub Query with Distinct
我正在尝试获取不同的区号,这样我就可以根据每周日期范围过滤报告中的前 5 个区域代码,每次它有 运行。
SELECT
[Area] AS 'AreaCode',
(SELECT COUNT(*) FROM gail_hazzards gh1 WHERE [gh1].[Area] = [gh].[Area]) AS 'AreaCount',
CONVERT(DATE, gh.[Timetag1], 201) AS 'Time'
FROM
gail_hazzards gh
GROUP BY gh.[Area], CONVERT(DATE, gh.[Timetag1], 201)
ORDER BY AreaCount DESC
结果: 我一直在尝试添加子查询以获取不同的区号,但在尝试使其正确显示时遇到问题:/
AreaCode AreaCount Time
480 683 2016-03-23
480 683 2016-03-24
480 683 2016-03-25
480 683 2016-03-29
480 683 2016-03-30
870 210 2016-04-15
870 210 2016-04-16
870 210 2016-04-19
870 210 2016-04-20
870 210 2016-04-21
根据您问题中的描述,我希望查询如下所示:
SELECT [Area] AS AreaCode, COUNT(*) AS AreaCount,
CONVERT(DATE, gh.[Timetag1], 201) AS 'Time'
FROM gail_hazzards gh
WHERE gh.Timetag1 BETWEEN ? AND ?
GROUP BY gh.[Area]
ORDER BY AreaCount DESC;
我不确定 "week time range" 应该是什么,但它可能类似于:
WHERE gh.Timetag1 BETWEEN DATEADD(DAY, -6, CAST(GETDATE() as DATE)) AND CAST(GETDATE() as DATE)
试试这个,
select AreaCode,AreaCount,Time from (SELECT row_number() over(partition by Area order by [Timetag1] desc) as RowNum,
Area as AreaCode, COUNT(*) AS AreaCount,
CONVERT(varchar, Timetag1, 103) AS 'Time'
FROM gail_hazzards
GROUP BY Area,Timetag1) as tbl
where RowNum<6
order by AreaCode,Time
SELECT DISTINCT(Area),
(SELECT COUNT(*) FROM [dbo].[tkg_gail_hazards] c WHERE c.Area = x.Area and CONVERT(date, c.TimeTag1, 102) >= CONVERT(date, @p_start, 102) AND CONVERT(date, c.TimeTag1, 102) <= CONVERT(date, @p_end, 102)) as 'Total'
FROM [dbo].[tkg_gail_hazards] x
ORDER BY Total desc;
上面的代码以及应用的一些过滤器为我提供了所需的数据 - 谢谢大家的输入。
我正在尝试获取不同的区号,这样我就可以根据每周日期范围过滤报告中的前 5 个区域代码,每次它有 运行。
SELECT
[Area] AS 'AreaCode',
(SELECT COUNT(*) FROM gail_hazzards gh1 WHERE [gh1].[Area] = [gh].[Area]) AS 'AreaCount',
CONVERT(DATE, gh.[Timetag1], 201) AS 'Time'
FROM
gail_hazzards gh
GROUP BY gh.[Area], CONVERT(DATE, gh.[Timetag1], 201)
ORDER BY AreaCount DESC
结果: 我一直在尝试添加子查询以获取不同的区号,但在尝试使其正确显示时遇到问题:/
AreaCode AreaCount Time
480 683 2016-03-23
480 683 2016-03-24
480 683 2016-03-25
480 683 2016-03-29
480 683 2016-03-30
870 210 2016-04-15
870 210 2016-04-16
870 210 2016-04-19
870 210 2016-04-20
870 210 2016-04-21
根据您问题中的描述,我希望查询如下所示:
SELECT [Area] AS AreaCode, COUNT(*) AS AreaCount,
CONVERT(DATE, gh.[Timetag1], 201) AS 'Time'
FROM gail_hazzards gh
WHERE gh.Timetag1 BETWEEN ? AND ?
GROUP BY gh.[Area]
ORDER BY AreaCount DESC;
我不确定 "week time range" 应该是什么,但它可能类似于:
WHERE gh.Timetag1 BETWEEN DATEADD(DAY, -6, CAST(GETDATE() as DATE)) AND CAST(GETDATE() as DATE)
试试这个,
select AreaCode,AreaCount,Time from (SELECT row_number() over(partition by Area order by [Timetag1] desc) as RowNum,
Area as AreaCode, COUNT(*) AS AreaCount,
CONVERT(varchar, Timetag1, 103) AS 'Time'
FROM gail_hazzards
GROUP BY Area,Timetag1) as tbl
where RowNum<6
order by AreaCode,Time
SELECT DISTINCT(Area),
(SELECT COUNT(*) FROM [dbo].[tkg_gail_hazards] c WHERE c.Area = x.Area and CONVERT(date, c.TimeTag1, 102) >= CONVERT(date, @p_start, 102) AND CONVERT(date, c.TimeTag1, 102) <= CONVERT(date, @p_end, 102)) as 'Total'
FROM [dbo].[tkg_gail_hazards] x
ORDER BY Total desc;
上面的代码以及应用的一些过滤器为我提供了所需的数据 - 谢谢大家的输入。