我试图仅通过使用带有设备名称的SQL Server中的Min
和Max
函数进行先进先出和后进先出来生成报告。我的问题是,当我调用设备名称(EDailyEvents.EDevName)时,如果同一个人多次打孔,它将对同一个人显示多次。当我只需要一个条目时,先入后出。下面是我要使用的简单查询。
SELECT
DISTINCT EDailyEvents.EPunchDate,
EDailyEvents.EToken,
EDailyEvents.EName,
Emaster.EDesig,
EDailyEvents.EDevName,
MIN(EDailyEvents.EPunchTime) AS 'Time In',
MAX(EDailyEvents.EPunchTime) AS 'Time Out'
FROM
EDailyEvents
INNER JOIN EMaster ON
EDailyEvents.EToken = EMaster.EToken
GROUP BY
EDailyEvents.EPunchDate,
EDailyEvents.EToken,
EDailyEvents.EName,
Emaster.EDesig,
EDailyEvents.EDevName
答案 0 :(得分:0)
先入
onePageOfProducts
最后,订购desc
答案 1 :(得分:0)
如果要获取其他先进/后出值,则应调整“组字段”。
在这种情况下,您将基于以下值创建组:
是的,有可能存在多个具有重复值的组。您可能有多个具有相同EName值但具有不同EDevName值的组。或相反:具有相同的EDevName值,但具有不同的EName值。
如果您需要更多常规组,例如,如果您不需要特定于EToken和EName值,则应将那些“不必要的”组字段留在外面。类似于以下查询:
SELECT
EDailyEvents.EPunchDate,
EDailyEvents.EDevName,
Emaster.EDesig,
MIN(EDailyEvents.EPunchTime) AS 'Time In',
MAX(EDailyEvents.EPunchTime) AS 'Time Out'
FROM
EDailyEvents
INNER JOIN EMaster ON
EDailyEvents.EToken = EMaster.EToken
GROUP BY
EDailyEvents.EPunchDate,
EDailyEvents.EDevName,
Emaster.EDesig
这样,您将获得较少的组(但是,每个组中的数据更多,因此,对于诸如MIN和MAX的聚合函数,当然会导致相应的不同结果)。
另一个例子:如果您不想基于不同的令牌和不同的设备名称创建不同的组,则可以忽略这些字段。像这样:
SELECT
EDailyEvents.EPunchDate,
EDailyEvents.EName,
Emaster.EDesig,
MIN(EDailyEvents.EPunchTime) AS 'Time In',
MAX(EDailyEvents.EPunchTime) AS 'Time Out'
FROM
EDailyEvents
INNER JOIN EMaster ON
EDailyEvents.EToken = EMaster.EToken
GROUP BY
EDailyEvents.EPunchDate,
EDailyEvents.EName,
Emaster.EDesig
通过这些示例,我假设您现在可以轻松地创建最终结果中实际需要的组。