2014-02-26 298 views
0

我有一張表包含來自多個交易的數據,並且我一直試圖獲取每天,每個客戶的最早記錄,並調整了我在本網站中看到的其他解決方案(例如this one ),但他們沒有爲我工作。SQL每天的第一筆交易

交易

 
Time     Id Client  Price  Quantity 
1/2/2013 09:33:20 AM 1 Albert  100.00  5,300 
1/2/2013 10:34:20 AM 2 Albert  100.90  4,800 
1/2/2013 10:34:20 AM 3 Lewis  80.00  25,987 
1/2/2013 11:35:23 AM 4 Benson  251.00   700 
1/2/2013 14:36:20 AM 5 Albert  100.00  2,250 
1/2/2013 15:31:12 AM 6 Albert  99.50  1,340 
1/3/2013 09:33:20 AM 7 Benson  250.00   900 
1/3/2013 15:13:12 AM 8 Benson  250.00   800 
1/3/2013 16:03:55 AM 9 Lewis  80.00  18,890 
1/4/2013 09:01:01 AM 10 Albert  101.00  1,190 
1/4/2013 09:01:01 AM 11 Albert  100.99  98,890 
1/4/2013 09:01:01 AM 12 Lewis  80.98  6,890 
1/4/2013 10:51:00 AM 13 Benson  279.18   190 
1/4/2013 10:51:00 AM 14 Albert  99.36  78,053 
... 

的ID是唯一的,並且也被定義按時間順序進行排序。時間不是唯一的,這意味着可能有兩個交易完全同時發生。

SQL查詢需要將拉出第一筆交易的每個客戶端一樣,每一天,價格和數量,像在一起:

 
Date   Client Price Quantity 
1/2/2013  Albert 100.00  5,300 
1/2/2013  Benson 251.00  700 
1/2/2013  Lewis  80.00 25,987 
1/3/2013  Benson 250.00  900 
1/3/2013  Lewis  80.00 18,890 
1/4/2013  Albert 101.00  1,190 
1/4/2013  Lewis  80.98  6,890 
1/4/2013  Benson 279.18  190 

誰能幫助我該怎麼辦呢在SQL中?

+0

您正在使用什麼數據庫? –

+0

數據庫在MS Access中,但我很可能會在MySQL –

回答

1

你不指定數據庫。所以這是一個普遍的方法。這個想法可以在大多數數據庫中使用,但是其中一些功能是不同的。

select cast(t.time as date) as "date", t.* 
from transactions t 
where not exists (select 1 
        from transactions t2 
        where cast(t2.time as date) = cast(t.time as date) and 
         t2.client = t.client and 
         t2.id < t.id 
       ); 

從某個時間獲取日期的表達方式各不相同。在某些數據庫中,這可能是date(time)(MySQL)或trunc(time)(Oracle)或其他。

編輯:

在Access中,這將是:

select CDATE(t.time) as [date], t.* 
from transactions t 
where not exists (select 1 
        from transactions t2 
        where CDATE(t2.time) = CDATE(t.time) and 
         t2.client = t.client and 
         t2.id < t.id 
       ); 

在MySQL:

select date(t.time) as "date", t.* 
from transactions t 
where not exists (select 1 
        from transactions t2 
        where date(t2.time) = date(t.time) and 
         t2.client = t.client and 
         t2.id < t.id 
       ); 
+0

中執行查詢。但這不會由客戶端分區。 – Blorgbeard

+0

@Blorgbeard。 。 。謝謝。我錯過了那個條件。 –

+0

謝謝,出於某種原因,CDATE沒有在MS Access中工作,但在MySQL中很順利.. –

1

在SQL Server中,這樣的事情應該工作:

select cast(Time as date), Client, Price, Quantity 
from (
select *, row_number() 
      over (partition by Client, cast(Time as Date) order by Id) [rn] 
from transactions 
) x where x.rn = 1 

這裏有一個sqlfiddle:http://sqlfiddle.com/#!6/0725d/1

相關問題