基于日期时间一小时内的最高结果对列表进行排序 [英] Sort list based on top result in an hour from datetime

查看:102
本文介绍了基于日期时间一小时内的最高结果对列表进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好。

我正在尝试查询以计算表格中每小时的总条目数,并仅显示日期的最高值。

For例如,今天型号A的结果为6个100个,7个200个,8个50个。在这种情况下,我需要显示的是一列中只有200个,而另一列中的时间(7)。

我能够显示最高值但我无法显示时间,如果我显示时间然后顶部不起作用...

样品:

包括小时数:

没有排名靠前 [ ^ ]

不包括小时数:

WithTop [ ^ ]

我真的很感谢你的帮助!



我尝试了什么:



这是我到目前为止尝试的查询(没有时间)

Hello.
I'm trying to do a query to calculate the total entries per hour in a table and show only the top value for the date.
For example, Today model A has results at 6 for 100 pcs, at 7 for 200 pcs and at 8 for 50 pcs. In this case what I need to show is only 200 pcs in a column and the Time (7) in another column.
I have been able to show the top values but I cannot show the time, if I show the time then the top does not work...
Samples:
Including Hours:
Without Top[^]
Not Including Hours:
WithTop[^]
I really appreciate your help!

What I have tried:

This is the query that I've tried so far (Without Hour)

SELECT *
FROM
       (
       select count(barcodenum)as count1, date1, Model_sap, model_customer, linea
       from   (  
                           SELECT FinishGoods.linea, FinishGoods.Model_sap, model.model_customer,FinishGoods.BarCodeNum,CONVERT(VARCHAR(10), scanprod.fecha, 102) as date1, scanprod.fecha
                           FROM FinishGoods  INNER JOIN model ON FinishGoods.Model_sap = model.model_ext INNER JOIN scanprod ON FinishGoods.BarCodeNum = scanprod.barcodenum  
                           WHERE (FinishGoods.linea <> '0') AND (FinishGoods.linea <> '') AND FinishGoods.scandt is not null  AND (scanprod.fecha >= '2016-03-18 06:00:00' AND scanprod.fecha <= '2016-03-22 23:59:59'  ) 
                     ) as tbl1 
       group by date1,  DATEPART(Hour, fecha), Model_sap, model_customer,linea--,hora1
       --order by model_sap, linea
) AS HourlySalesData
PIVOT( max(count1) FOR [date1] IN ([2016.03.18],[2016.03.19],[2016.03.20],[2016.03.21],[2016.03.22])) AS DatePivot
order by model_customer





这一小时包括:



And This one with hour included:

SELECT *
FROM
       (
       select count(barcodenum)as count1, date1, Model_sap, model_customer, linea, (convert(int, DATEPART(Hour, fecha))) as hour_
       from   (  
                           SELECT FinishGoods.linea, FinishGoods.Model_sap, model.model_customer,FinishGoods.BarCodeNum,CONVERT(VARCHAR(10), scanprod.fecha, 102) as date1, scanprod.fecha
                           FROM FinishGoods  INNER JOIN model ON FinishGoods.Model_sap = model.model_ext INNER JOIN scanprod ON FinishGoods.BarCodeNum = scanprod.barcodenum  
                           WHERE (FinishGoods.linea <> '0') AND (FinishGoods.linea <> '') AND FinishGoods.scandt is not null  AND (scanprod.fecha >= '2016-03-18 06:00:00' AND scanprod.fecha <= '2016-03-22 23:59:59'  ) 
                     ) as tbl1 
       group by date1,  DATEPART(Hour, fecha), Model_sap, model_customer,linea--,hora1
       --order by model_sap, linea
) AS HourlySalesData
PIVOT( max(count1) FOR [date1] IN ([2016.03.18],[2016.03.19],[2016.03.20],[2016.03.21],[2016.03.22])) AS DatePivot
order by model_customer

推荐答案

你知道
ROW_NUMBER() OVER(PARTITION BY date1 ORDER BY count1 ASC) 

它返回一个从1开始到x的整数,作为分区中的列并按顺序排序,如下所示



it returns an integer begining from 1 to x groupped as the collumns in partition by and orderd as in order by something like this

SELECT *
FROM
       (
       select count(FinishGoods.BarCodeNum) as count1, CONVERT(VARCHAR(10), scanprod.fecha, 102) as date1, (convert(int, DATEPART(Hour, fecha))) as hour_,
	   ROW_NUMBER() OVER(PARTITION BY CONVERT(VARCHAR(10), scanprod.fecha, 102) ORDER BY count(FinishGoods.BarCodeNum) ASC)  as rnum
       FROM FinishGoods  INNER JOIN model ON FinishGoods.Model_sap = model.model_ext INNER JOIN scanprod ON FinishGoods.BarCodeNum = scanprod.barcodenum  
       WHERE (FinishGoods.linea <> '0') AND (FinishGoods.linea <> '') AND FinishGoods.scandt is not null  AND (scanprod.fecha >= '2016-03-18 06:00:00' AND scanprod.fecha <= '2016-03-22 23:59:59'  ) 
       group by CONVERT(VARCHAR(10), scanprod.fecha, 102), DATEPART(Hour, fecha)
       --order by model_sap, linea
) AS HourlySalesData where rnum=1



它应该工作

ROW_NUMBER(Transact-SQL)| Microsoft Docs [ ^ ]


这篇关于基于日期时间一小时内的最高结果对列表进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆