需要SQL查询的帮助吗
我有以下资料: TransactionType Lane TransactionDate ------------------------------------------------ Sale 17 2011-07-21 06:15:34 SignOn 18 2011-07-21 07:00:00 Sale 18 2011-07-21 07:06:43 SignOn 20 2011-07-21 08:01:12 Sale 18 2011-07-21 07:30:00 Sale 18 2011-07-21 08:30:00 Sale 18 2011-07-21 09:30:50 Sale 20 2011-07-21 10:15:34 SignOff 18 2011-07-21 19:00:00 SignOff 20 2011-07-21 19:10:52 TransactionType Lane TransactionDate ------------------------------------------------ 销售17 2011-07-2106:15:34 签名18 2011-07-21 07:00:00 销售18 2011-07-21 07:06:43 签名20 2011-07-21 08:01:12 销售18 2011-07-21 07:30:00 销售18 2011-07-21 08:30:00 销售18 2011-07-21 09:30:50 销售20 2011-07-21 10:15:34 签字18 2011-07-21 19:00:00 签字20 2011-07-21 19:10:52 我需要获得以下信息:需要SQL查询的帮助吗,sql,sql-server,Sql,Sql Server,我有以下资料: TransactionType Lane TransactionDate ------------------------------------------------ Sale 17 2011-07-21 06:15:34 SignOn 18 2011-07-21 07:00:00 Sale 18 2011-07-21 07:06:
lane
计数车道
处于登录状态的总时间,例如带有车道
编号18的行为12小时,带有车道
20的行为11小时9分40秒以下内容不适用于每条车道的多个登录-注销事件,但至少是一个开始。 如果我有关于每天允许多少登录注销事件和/或其他限制的信息,我将尝试调整它,使其在一般情况下工作 1.位于登录和注销交易类型之间的通道计数 2.每条车道处于信号状态的总时间,例如,车道号为18的世界其他地区为12小时,车道号为20的世界其他地区为11小时9分40秒
这将得到它的大部分。。。包括每个通道的多个登录/注销以及每个登录/注销时间段内的交易数量。一旦您得到这个结果,您就可以从中进行查询,以获得具有任何汇总值的活动车道/会话的总计数。。。例如,第18条通道的总签入/签出时间、总销售交易记录,或者仅仅是总的开放通道数量以及此类销售活动的占比 由于group by在通道上,signon/off,所以我只对小时、分钟、秒应用了MIN(),这在每个signon/off会话中始终是一个常量
SELECT
PreQuery.Lane,
PreQuery.SignedOn,
PreQuery.SignedOff,
MIN( datediff(hour, PreQuery.SignedOn, PreQuery.SignedOff )) as hours,
MIN( datediff(minute, PreQuery.SignedOn, PreQuery.SignedOff )) as minutes,
MIN( datediff(second, PreQuery.SignedOn, PreQuery.SignedOff )) as seconds,
COUNT(*) as NumOfSales
from
( SELECT
T1.Lane,
T1.TransactionDate SignedOn,
MIN( T2.TransactionDate ) as SignedOff
from
Trans1 T1
LEFT JOIN Trans1 T2
ON T1.Lane = T2.Lane
AND T2.TransactionType = "SignOff"
AND T2.TransactionDate > T1.TransactionDate
where
T1.TransactionType = "SignOn"
group by
T1.Lane,
T1.TransactionDate ) PreQuery
LEFT Join Trans1 T3
on PreQuery.Lane = T3.Lane
AND T3.TransactionType = "Sale"
AND T3.TransactionDate BETWEEN PreQuery.SignedOn AND PreQuery.SignedOff
GROUP BY
PreQuery.Lane,
PreQuery.SignedOn,
PreQuery.SignedOff
这是家庭作业吗?不,这不是家庭作业,你试图解决什么问题?你的服务器是什么?通道SQL小姐?MYSQL?此查询必须是一个或两个不同的查询?输入参数是什么?我想他指的是每个Lanethan的销售额。谢谢你的回复,你的解决方案确实帮了我的忙!
SELECT signon.lane,
datediff(hour, signon.transactiondate, signoff.transactiondate) as hours,
datediff(minute, signon.transactiondate, signoff.transactiondate) as minutes,
datediff(second, signon.transactiondate, signoff.transactiondate) as seconds,
FROM table1 signon
INNER JOIN table1 signoff
ON (signoff.lane = signon.lane
AND signoff.transactiondate > signon.transactiondate
AND signoff.transactiontype = 'SignOff')
WHERE signon.transactiontype = 'SignOn'
GROUP BY signon.lane, signon.transactiondate
SELECT
PreQuery.Lane,
PreQuery.SignedOn,
PreQuery.SignedOff,
MIN( datediff(hour, PreQuery.SignedOn, PreQuery.SignedOff )) as hours,
MIN( datediff(minute, PreQuery.SignedOn, PreQuery.SignedOff )) as minutes,
MIN( datediff(second, PreQuery.SignedOn, PreQuery.SignedOff )) as seconds,
COUNT(*) as NumOfSales
from
( SELECT
T1.Lane,
T1.TransactionDate SignedOn,
MIN( T2.TransactionDate ) as SignedOff
from
Trans1 T1
LEFT JOIN Trans1 T2
ON T1.Lane = T2.Lane
AND T2.TransactionType = "SignOff"
AND T2.TransactionDate > T1.TransactionDate
where
T1.TransactionType = "SignOn"
group by
T1.Lane,
T1.TransactionDate ) PreQuery
LEFT Join Trans1 T3
on PreQuery.Lane = T3.Lane
AND T3.TransactionType = "Sale"
AND T3.TransactionDate BETWEEN PreQuery.SignedOn AND PreQuery.SignedOff
GROUP BY
PreQuery.Lane,
PreQuery.SignedOn,
PreQuery.SignedOff