2012-06-07 27 views
0

我從2個數據庫開始工作,我需要查找匹配最近時間的記錄。這兩個字段都是datetime()。在PDO語句中獲取最近的時間

因此,在本質:

table1.time = 2012-06-07 15:30:00 
table2.time = 2012-06-07 15:30:01 
table2.time = 2012-06-07 15:30:02 
table2.time = 2012-06-07 15:30:03 

注:我查詢表(表2)是MSSQL表,table1.time是一個日期()的時間。我需要在table2中找到最接近table1.time的那一行,但是我沒有guarnatee它會完全匹配,所以我需要最接近的。我只需要返回1個結果。

我基於以前的一個stackoverflow查詢的例子嘗試了下面的SQL,但它失敗了。

表1是一個MySQL數據庫,在那裏表2是MSSQL和查詢發生在表2(MSSQL)

try { 
      $sql = " 
       SELECT  
        PCO_AGENT.NAME, 
        PCO_INBOUNDLOG.LOGIN AS LOGINID, 
        PCO_INBOUNDLOG.PHONE AS CALLERID, 
        PCO_INBOUNDLOG.STATION AS EXTEN, 
        PCO_INBOUNDLOG.TALKTIME AS CALLLENGTH, 
        PCO_INBOUNDLOG.CHANNELRECORDID AS RECORDINGID, 
        PCO_SOFTPHONECALLLOG.RDATE, 
        PCO_INBOUNDLOG.RDATE AS INBOUNDDATE 
       FROM   
        PCO_INBOUNDLOG 
       INNER JOIN 
         PCO_LOGINAGENT ON PCO_INBOUNDLOG.LOGIN = PCO_LOGINAGENT.LOGIN 
       INNER JOIN 
         PCO_SOFTPHONECALLLOG ON PCO_INBOUNDLOG.ID = PCO_SOFTPHONECALLLOG.CONTACTID 
       INNER JOIN 
         PCO_AGENT ON PCO_LOGINAGENT.AGENTID = PCO_AGENT.ID 
       WHERE 
        PCO_INBOUNDLOG.STATION = :extension 
       AND ABS(DATEDIFF(:start,PCO_SOFTPHONECALLLOG.RDATE)) 
      "; 
      $arr = array(":extension" => $array['extension'], ":start" => $array['start']); 
      $query = $this->mssql->prepare($sql); 
      $query->execute($arr); 
      $row = $query->fetchAll(PDO::FETCH_ASSOC); 
      $this->pre($row); 
     } 

我收到以下錯誤的時刻:

SQLSTATE[HY000]: General error: 174 General SQL Server error: Check messages from the SQL Server [174] (severity 15) [(null)]SQLSTATE[HY000]: General error: 174 General SQL Server error: Check messages from the SQL Server [174] (severity 15) [(null)] 
+0

您是否嘗試直接在SQL Server中執行此操作? –

+0

不幸的是,我也沒有直接訪問SQL服務器 – mauzilla

+0

也如上所述,我使用多個連接來獲取數據來獲取日期。 – mauzilla

回答

0

發現了一個較短的版本:

SELECT * FROM `table` WHERE `date` < '$var' ORDER BY date LIMIT 1;