不同的子查询

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;

上面的代码以及应用的一些过滤器为我提供了所需的数据 - 谢谢大家的输入。