2012-11-26 178 views
-3

這是我的表如何獲取此查詢?

Create table gpscli 
(
    cliente int,/*this is my id client*/ 
    inicio datetime,/*this is start time*/ 
    fin datetime,/this is finished time**/ 
    fecha datetime/*this is my date because inicio and fin could be a bad date*/ 
) 

表填寫的東西,因爲這

select cliente, inicio, fin, fecha from gpscli order by fecha, cliente 

1 '23-04-2012 10:23:51' '23-04-2012 10:26:38' '23-04-2012 00:00:000' 
2 '23-04-2012 10:28:41' '23-04-2012 10:30:12' '23-04-2012 00:00:000' 
3 '23-04-2012 10:33:58' '23-04-2012 10:37:24' '23-04-2012 00:00:000' 
4 '23-04-2012 10:40:42' '23-04-2012 10:43:12' '23-04-2012 00:00:000' 
5 '23-04-2012 10:45:46' '23-04-2012 10:57:18' '23-04-2012 00:00:000' 
1 '24-04-2012 10:23:12' '24-04-2012 10:26:28' '24-04-2012 00:00:000' 
2 '24-04-2012 10:23:29' '24-04-2012 10:26:58' '24-04-2012 00:00:000' 
3 '24-04-2012 10:23:23' '24-04-2012 10:26:56' '24-04-2012 00:00:000' 
4 '24-04-2012 10:23:12' '24-04-2012 10:26:28' '24-04-2012 00:00:000' 
5 '24-04-2012 10:23:29' '24-04-2012 10:26:58' '24-04-2012 00:00:000' 
1 '24-05-2012 10:23:12' '24-05-2012 10:26:28' '24-05-2012 00:00:000' 
2 '24-05-2012 10:23:29' '24-05-2012 10:26:58' '24-05-2012 00:00:000' 
3 '24-05-2012 10:23:23' '24-05-2012 10:26:56' '24-05-2012 00:00:000' 
4 '24-05-2012 10:23:12' '24-05-2012 10:26:28' '24-05-2012 00:00:000' 
5 '24-05-2012 10:23:29' '24-05-2012 10:26:58' '24-05-2012 00:00:000' 

此信息是由在這個時候,用戶保存的將被稱爲「主管」

上司是人,其在店面問題上商店客戶想要什麼產品。

所以他(監督)在汽車中移動。當他打開一個窗口(在pockec pc中)時,「inicio」被保存,當管理員關閉窗口時,「fin」被保存在數據庫中。

現在有了這些信息,我可以得到主管通過mes帶走客戶的時間,但我真的需要的是,主管通過mes在客戶之間轉移的時間有多長。

不需要客戶端1的第一個客戶端一天,第一個客戶端是有最小的inicio列。與fin列最後一個客戶端相同。

監督員花費多長時間在客戶端之間通過mes進行移動。

我需要的東西,因爲它

  • 爲第一客戶端傳輸時間爲0
  • 爲第二個客戶端,傳輸時間inicio(這inicio列的電流)- fin(這fin是以前的客戶)
  • 爲第三客戶端,傳輸時間inicio(這INICIO列是電流)- fin(這是fin前客戶端)

最後我需要group by month,client

我不知道如何得到它(不使用一個循環,我不希望使用它)

+2

在我們幫助您之前,您需要自己嘗試** ** **。 – Kermit

+0

命名一個'date'列('fecha')真的很可怕 - 很明顯這是一個'日期'(除了它是一個時間戳,所以......) - 它應該表示什麼?你說得對,在SQL中使用循環通常是不被接受的。我們也希望能夠提供一些樣本輸出,說明如何讓樣本數據出現,以符合您迄今所嘗試的內容。假設沒有重疊的時間戳,這並不是太糟糕,尤其是當你可以訪問必要的功能(OLAP函數,儘管CTE對此很好)。 –

回答

0

我能解決

create table #datos 
(
cliente int, 
fecha datetime, 
inicio datetime, 
fin datetime, 
id int identity 
) 


insert into #datos (cliente,fecha,inicio,fin) 
select cliente,fecha, isnull(t_inicio,'01/01/1900') inicio,isnull(t_fin,'01/01/1900') fin 
from gpscli order by fecha, t_inicio,t_fin 


alter table #datos 
add idmas1 int 

update #datos set idmas1=id+1 


select d.cliente, d.fecha, d.inicio, d.fin,d.id,d2.fin fin_anterior from #datos d 
inner join #datos d2 on 
d.id=d2.idmas1 

現在我已完成時間稱爲「fin_anterior」,現在我可以按客戶端,月份或如何有必要分組