フォーラムに表示されることがより困難SQL問題:45(時間でユーザーがオンライン着陸時間を、分計算)

オリジナル: SQLフォーラムに表示される問題より困難:45(時間でユーザーがオンライン着陸時、分の計算)

最近では、フォーラムでは、私は彼らが解決することができますが、多くの困難なSQLの問題に会ったが、数日後、彼らはの溶液を忘れて、覚えていないことができました。

だから、私は出会いの後にこの問題ことを再度、記録する必要性を感じる、との考えから回答を得ることができます。



ユーザーがオンライン着陸時間を解決する方法 - 時間と分の計算を。

http://bbs.csdn.net/topics/390613823

私はユーザーがオンライン時間が欲しい、形式は次のとおりです。08:00とすると、この長い行結果の午前8時43分フォーマット。



私は、ドキュメントSQLをチェックしてみてください、また多くのことをBaiduの。しかし、この点ではありませんアプリケーション。
私はまた、多くのことを書くことを試みたが、私がすることはできません。
私はオンライン分の合計数、または秒の合計数を取得することができます。希望の形式を与えたわけではありません。
これは私のコードです:
SELECT TA [ユーザー]、(DATEDIFF(miザ、ta.time、tb.time))から。 
( 'ログイン'からWHERE T1.operate = TlのSELECT *)AS TA
インナー参加 
SELECT * FROM( WHERE T1.operate = Tlの'ジンバブエログアウト')AS TB
ON TA。[ユーザー] = TB。[ユーザー]

-------------------------- ----------
または書き込み:
SELECT TA [ユーザー]、キャスト(DATEDIFF(時間、ta.time、tb.time)AS VARCHAR)+ ':' +キャスト(DATEDIFF(分、TA .time、tb.time)AS VARCHAR)
から
([ユーザー]を選択し、[時間]はTlのからAS TA = 'ログイン' [操作])
内部結合
([ユーザー]を選択し、[時間]がTlのから[操作] = 'ジンバブエログアウト')AS TB
。ON TA [ユーザー] = TB [ユーザー] .;

両方のバージョンは、所望の結果を達成することができません。指導の神の要請で、ヘルプが溶液を得ました。
私は、髪のレンダリングのテストを終えました。

私の解決策:

方法1:


   
   
  1. drop table t1
  2. create table T1
  3. (
  4. [ user] varchar( 30),
  5. operate varchar( 10),
  6. time datetime
  7. )
  8. insert into T1
  9. select 'LiMing', 'Login', '2010/10/24 8:03' union all
  10. select 'WangYi', 'Login', '2010/10/24 8:14' union all
  11. select 'WangYi', 'Logout', '2010/10/24 16:14' union all
  12. select 'LiMing', 'Logout', '2010/10/24 16:14'
  13. select [ user],
  14. cast( cast( round( interval * 1.0 / 60, 0, 1) as int) as varchar) + ':' +
  15. case when interval * 1.0 % 60 <> 0
  16. then cast( cast( round( interval * 1.0 % 60, 0, 1) as int) as varchar)
  17. else '00'
  18. end
  19. from
  20. (
  21. select T1.[ user],
  22. DATEDIFF( MINUTE,t1.time,t2.time) as interval
  23. from T1
  24. inner join T1 t2
  25. on t1.[ user] = t2.[ user]
  26. and t1.operate = 'login'
  27. and t2.operate = 'logout'
  28. )a
  29. /*
  30. user (无列名)
  31. LiMing 8:11
  32. WangYi 8:00
  33. */

方法2:


   
   
  1. --方法2.
  2. select [ user],
  3. convert( varchar( 5), DATEADD( MINUTE, interval, time), 114)
  4. from
  5. (
  6. select T1.[ user],
  7. convert( varchar( 10),t1.time, 120) as time,
  8. DATEDIFF( MINUTE,t1.time,t2.time) as interval
  9. from T1
  10. inner join T1 t2
  11. on t1.[ user] = t2.[ user]
  12. and t1.operate = 'login'
  13. and t2.operate = 'logout'
  14. )a
  15. /*
  16. user (无列名)
  17. LiMing 08:11
  18. WangYi 08:00
  19. */

 

最近では、フォーラムでは、私は彼らが解決することができますが、多くの困難なSQLの問題に会ったが、数日後、彼らはの溶液を忘れて、覚えていないことができました。

だから、私は出会いの後にこの問題ことを再度、記録する必要性を感じる、との考えから回答を得ることができます。

公開された416元の記事 ウォンの賞賛135 ビュー950 000 +

おすすめ

転載: www.cnblogs.com/lonelyxmas/p/12020079.html