我对表有以下查询:
tblrevrankreport
CREATE TABLE `tblrevrankreport` ( `id` bigint(20) NOT NULL auto_increment, `ndate` date NOT NULL, `tid` varchar(50) default '0', `transid` varchar(30) default NULL, `rmno` varchar(10) NOT NULL, `rmdesc` text, `rmcat` varchar(30) default NULL, `rmcatdesc` varchar(30) default NULL, `rmtariff` varchar(50) default NULL, `rmtariffdesc` text, `marketcode` varchar(50) default NULL, `marketdesc` text, `cindate` date default NULL, `coutdate` date default NULL, `nyts` int(10) default '0', `noofadult` int(10) default '0', `noofchild` int(10) default '0', `mulrate` varchar(10) default 'False', `revamt` double(20,6) default '0.000000', `othamt` double(20,6) default '0.000000', `lastmod` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, `Company` varchar(200) default '', `xDate` date default NULL, PRIMARY KEY (`id`,`ndate`,`rmno`), UNIQUE KEY `id` (`id`))
tblcustomerinfohistory
CREATE TABLE `tblcustomerinfohistory` ( `ID` varchar(200) default '', `TransactionID` varchar(200) default '', `ConfirmationNo` varchar(200) default '', `ConfirmationDate` date default NULL, `ReservationNo` varchar(200) default '', `GFNo` varchar(200) default '', `ProcessBy` varchar(200) default '', `UserName` varchar(200) default '', `Room_No` varchar(200) default '', `RoomCat` varchar(200) default '', `Room_Tariff` varchar(200) default '', `RTC` varchar(200) default '', `ActionRTC` varchar(200) default 'False', `LastName` varchar(300) default '', `FirstName` varchar(300) default '', `MiddleName` varchar(300) default '', `Title` varchar(200) default '', `Country` varchar(200) default '', `xLanguage` varchar(200) default '', `VIP` varchar(200) default '', `PhoneNo` varchar(200) default '', `Agent` varchar(200) default '', `Company` varchar(200) default '', `xCompanyCode` varchar(100) default '', `xGroup` varchar(200) default '', `Source` varchar(200) default '', `CellNo` varchar(200) default '', `CInDate` date default NULL, `COutDate` date default NULL, `Nights` bigint(20) default '0', `NoOfRooms` bigint(20) default '0', `NoOfAdult` bigint(20) default '0', `NoOfChild` bigint(20) default '0', `RateCode` varchar(200) default '', `ArrivalTime` varchar(200) default '', `DepartureTime` varchar(200) default '', `Packages` varchar(200) default '', `BlockCode` varchar(200) default '', `xCurrency` varchar(200) default '', `FixedRate` varchar(200) default '', `ResType` varchar(200) default '', `Market` varchar(200) default '', `Source2` varchar(200) default '', `Origin` varchar(200) default '', `PaymentType` varchar(200) default '', `CCNo` varchar(200) default '', `ExpDate` varchar(200) default '0', `PickUpReqd` varchar(200) default '', `SCode1` varchar(200) default '', `CCode1` varchar(200) default '', `PickUpTime` varchar(200) default '', `DropOffReqd` varchar(200) default '', `SCode2` varchar(200) default '', `CCode2` varchar(200) default '', `DropOffTime` varchar(200) default '', `NoPost` varchar(200) default '', `Stat` varchar(200) default '', `ReservedType` varchar(200) default '', `BusSource` varchar(200) default '', `HomeAdd` varchar(200) default '', `Remarks` varchar(200) default '', `EMail` varchar(200) default '', `AmountDue` decimal(30,2) default '0.00', `TransType` varchar(200) default '', `GFNServices` varchar(5000) default '', `GFNMeals` varchar(5000) default '', `GFNRoom` varchar(5000) default '', `GFNOthers` varchar(5000) default '', `GFComment` varchar(5000) default '', `GFCommentOPT` varchar(5000) default '', `FlightNo` varchar(200) default '', `FlightArr` date default NULL, `FlightArrT` varchar(200) default '0', `FlightNoDep` varchar(200) default NULL, `FlightDepD` date default NULL, `FlightDepT` varchar(200) default '0', `DiscountAmount` double(30,2) default '0.00', `DiscPercentage` bigint(20) default '0', `MealsRem` varchar(200) default '', `xRemarks` varchar(200) default '', `xComments` varchar(800) default '', `BFStat` varchar(200) default '', `BFAd` bigint(20) default '0', `BFCh` bigint(20) default '0', `LNStat` varchar(200) default '', `LNAd` bigint(20) default '0', `LNCh` bigint(20) default '0', `DNStat` varchar(200) default '', `DNAd` bigint(20) default '0', `DNCh` bigint(20) default '0', `FullBoard` varchar(200) default '', `CardType` varchar(200) default '', `CardNo1` varchar(200) default '', `CardNo2` varchar(200) default '', `CardNo3` varchar(200) default '', `CardNo4` varchar(200) default '', `MachineNo` varchar(200) default '', `TraceRemarks` varchar(200) default '', `TransFer` double(20,0) default '0', `NewTrans` varchar(200) default '', `PromoRate` double(30,2) default '0.00', `ExtendCon` varchar(200) default '0', `ExtendNights` double(30,2) default '0.00', `OptionDate` date default NULL, `ReservePayment` decimal(40,2) default '0.00', `OptionOverride` varchar(200) default 'False', `PersonOverride` varchar(200) default '', `DateOverride` varchar(200) default '', `PerExtendDate` varchar(200) default '', `DateExtendD` varchar(200) default '', `ModePay` varchar(200) default '', `CNP` varchar(200) default '', `SourceToPay` varchar(200) default '', `NSBilling` varchar(200) default '', `NSAmount` double(30,2) default '0.00', `NSDiscAmount` double(30,2) default '0.00', `NSOptType` varchar(200) default '', `NSOptNights` varchar(200) default '', `NSRemarks` varchar(200) default '', `CancelledDate` date default NULL, `CancelledPerson` varchar(200) default '', `RoomCleared` varchar(50) default '', `GPassport` varchar(100) default '', `Accompany1` varchar(200) default '', `Accompany2` varchar(200) default '', `Accompany3` varchar(200) default '', `Accompany4` varchar(200) default '', `Accompany5` varchar(200) default '', `Accompany6` varchar(200) default '', `AccompanyF1` varchar(70) default '', `AccompanyF2` varchar(70) default '', `AccompanyF3` varchar(70) default '', `AccompanyF4` varchar(70) default '', `AccompanyF5` varchar(70) default '', `AccompanyF6` varchar(70) default '', `AccompanyM1` varchar(70) default '', `AccompanyM2` varchar(70) default '', `AccompanyM3` varchar(70) default '', `AccompanyM4` varchar(70) default '', `AccompanyM5` varchar(70) default '', `AccompanyM6` varchar(70) default '', `AccompanyNo1` varchar(100) default '', `AccompanyNo2` varchar(100) default '', `AccompanyNo3` varchar(100) default '', `AccompanyNo4` varchar(100) default '', `AccompanyNo5` varchar(100) default '', `AccompanyNo6` varchar(100) default '', `MultipleRate` varchar(200) default 'False', `TransferRoomRes` varchar(200) default '', `RateSetup` varchar(200) default 'Night', `BookingRef` varchar(300) default '', `TimeShareCode` varchar(300) default '', `GuestBalance` decimal(30,2) default '0.00', `stayondate` date default NULL, `CheckInTime` varchar(20) default NULL, `isDORM` varchar(10) default '0', `PPV_No` varchar(50) default '', `AccountOf` varchar(200) default '', `CountryMain` varchar(50) default NULL, `PlateNo` varchar(100) default '', `Revenue` double(40,6) default '0.000000', `CPlateNo` varchar(100) default '', `xOCCUPATION` varchar(100) default '', `WithSC` varchar(5) default '0', `allocation` int(5) default '0', `NoOfSenior` int(10) default '0', `RmVatExempt` varchar(10) default 'False', `CINFolioNo` varchar(200) default '', `intLoad` int(1) default '0', `caName` varchar(200) default '', `dwh_ID` varchar(200) default '', `WinStat` varchar(100) default '', `JuruScript` varchar(300) default '', `intLoad2` int(4) default '0', `xuseraccess` varchar(50) default '', `xuseraccess2` varchar(50) default '', `xDate` date default NULL, `xID` int(11) NOT NULL auto_increment, PRIMARY KEY (`xID`))
tbltransactionpostingdumy
CREATE TABLE `tbltransactionpostingdumy` ( `id` varchar(40) default NULL, `GuestNO` varchar(200) default NULL, `RoomNO` varchar(200) default NULL, `trCode` varchar(200) default NULL, `Description` varchar(200) default NULL, `Amount` decimal(40,6) default '0.000000', `Qty` double(30,2) default NULL, `Win` varchar(20) default NULL, `CheckNO` varchar(200) default NULL, `refno` text, `XPOS` double(200,0) default '1', `Xdate` date default NULL, `roomdate` date default NULL, `roomadd` int(20) default '0', `settleCode` int(20) default '0', `Rout` int(20) default '0', `COut` int(20) default '0', `Supplement` text, `xuser` varchar(200) default NULL, `xTime` varchar(200) default '0', `GuestName` varchar(200) default '', `Source` varchar(200) default '', `TransferCharge` varchar(200) default '0', `AR` varchar(200) default 'False', `ARPayment` varchar(200) default 'False', `ChitNo` varchar(200) default '', `ORnumberNO` varchar(200) default '', `Correction` varchar(200) default 'False', `TRUE_DATE` date default NULL, `POS_QTY` bigint(10) default '0', `POS_TOTAL` decimal(30,2) default '0.00', `POS_AMTDUE` decimal(30,2) default '0.00', `POS_VAT` decimal(30,2) default '0.00', `POS_SC` decimal(30,2) default '0.00', `POS_WID` varchar(100) default '', `POS_WNAME` varchar(300) default '', `POS_CID` varchar(100) default '', `POS_CNAME` varchar(300) default '', `POST_STAT` varchar(100) default 'HMS', `MainTransNo` varchar(20) default '0', `TransferDesc` varchar(20) default '', `ConfiNo` varchar(20) default '', `isAdvBill` varchar(20) default '', `CCNum` varchar(200) default NULL, `CCName` varchar(200) default NULL, `HName` varchar(200) default NULL, `ExpDate` date default NULL, `AuthCode` varchar(200) default NULL, `isSOA` varchar(100) default 'NO', `SENDBILLTO` varchar(50) default NULL, `WithVat` tinyint(5) default '1', `WithSC` tinyint(5) default '1', `AMT_VAT` decimal(30,6) default '0.000000', `AMT_SC` decimal(30,6) default '0.000000', `CL_TRNF` tinyint(5) default '0', `G_ID` varchar(30) default '', `G_NAME` varchar(100) default '', `G_TRNO` varchar(5) default '', `SpecialCase` varchar(10) default '0', `SD_Amount` decimal(40,6) default '0.000000', `SD_Vat` decimal(40,6) default '0.000000', `SeniorDis` varchar(10) default '0', `SeniorPerc` decimal(40,6) default '0.000000', `withLT` tinyint(5) default '0', `amt_LT` decimal(30,6) default '0.000000', `WithSD` varchar(5) default '0', `AMT_SENIORDISC` decimal(30,6) default '0.000000', `xCat` varchar(200) default '', `SC_PERC` double(40,6) default '0.000000', `disctype` varchar(200) default '', `origAmount` decimal(40,2) default '0.00', `vatExempt` decimal(40,6) default '0.000000', `SENDBILLTOCODE` varchar(200) default '', `caID` int(100) default NULL, `CaTrans` varchar(100) default '', `ARCollections` tinyint(1) default '0', `vatExemptSales` decimal(40,6) default '0.000000', `xdatetime` timestamp NULL default CURRENT_TIMESTAMP, `baseCharge` decimal(40,6) default '0.000000', `SRP` decimal(40,6) default '0.000000', `seniorID` varchar(40) default '', `Machinenum` varchar(50) default '', `fullname` varchar(200) default '', KEY `idx_date` (`Xdate`), KEY `idx_guestno` (`GuestNO`), KEY `idx_id` (`id`), KEY `idx_machine` (`Machinenum`), KEY `idx_roomno` (`RoomNO`), KEY `idx_trcode` (`trCode`))
首先从' 2017-04-01'删除记录到' 2017-04-30':
DELETE FROM tblrevrankreport
WHERE xdate BETWEEN '2017-04-01' AND '2017-04-30';
然后获取记录并保存:
INSERT INTO tblrevrankreport (ndate, xDate, tid, transid, rmno, rmcat, rmcatdesc, rmtariff, marketdesc, cindate, coutdate, mulrate, revamt, othamt, Company)
SELECT
a.xDate, a.xDate, b.id, a.guestno, a.roomno,
b.RoomCat, b.roomcat, b.Room_Tariff,
b.Market, b.CInDate, b.coutdate, b.MultipleRate,
IF(c.ratecode = 1, (a.amount - (a.AMT_VAT + a.AMT_SC + a.AMT_LT)), ''),
IF(c.ratecode <> 1, (a.amount - (a.AMT_VAT + a.AMT_SC + a.AMT_LT)), ''),
b.Company
FROM
tbltransactionpostingdumy a
LEFT JOIN
tblcustomerinfo b ON a.MaintransNo = b.transactionID
LEFT JOIN
tblreftransaction c ON a.trcode = c.xcode
WHERE
(a.xDate BETWEEN '2017-04-01' AND '2017-04-30')
AND c.xcat = 'ROOM CHARGE';
然后问题发生在这里:
UPDATE
tblrevrankreport b, tblcustomerinfohistory a
SET
b.nyts = 1,
b.NoOfAdult = a.NoOfAdult,
b.NoOfChild = a.NoOfChild
WHERE
b.xdate = '2017-04-01'
AND '2017-04-30')
AND b.COutDate > b.xdate
AND b.rmcat <> 'PQ'
AND b.transid = a.TransactionID
AND b.xdate = a.Xdate;
最后一次查询花了很多时间,在tblrevrankreport中要更新的总记录数是5242.
还有其他方法可以改善它吗?
谢谢!