0

私は2つのデータベースから作業しており、最も近い時間に一致するレコードを見つける必要があります。両方のフィールドはdatetime()です。

つまり、本質的には:

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

注:クエリしているテーブル(table2)はmssqlテーブルであり、table1.timeはdatetime()時刻です。table2でtable1.timeに最も近い行を見つける必要がありますが、完全に一致するという保証がないため、最も近い行が必要です。1つの結果を返すだけです。

以前のstackoverflowクエリの例に基づいて、以下のSQLを試しましたが、機能しませんでした。

Table1はmysqlデータベースであり、table2はmssqlであり、クエリはtable2(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)]
4

1 に答える 1

0

短いバージョンが見つかりました:

 SELECT * FROM `table` WHERE `date` < '$var' ORDER BY date LIMIT 1;
于 2012-06-11T10:58:16.213 に答える