从MySql中检索最后一条记录

时间:2012-02-07 14:58:33

标签: mysql

我正在尝试从多个表中获取最新条目,我希望将最后一条记录插入到数据库中

这是我的查询

select distinct concat(e.firstname,' ',e.middleinitial,' ',e.lastname)
as empname, e.empid,egw.payperiodnumber,egw.payrollyear,date_format(cpd.paymentdate,'%m-%d-%Y')
as PaymentDate
from tblemployee e,tblemployeegrosswagesn egw,tblcustomerpaymentdates cpd
where e.empid=egw.empid and e.fedtaxid=egw.fedtaxid and egw.fedtaxid=cpd.fedtaxid
and e.PayFrequencyTypeID=cpd.payfrequencytype and 
cpd.payfrequencytype='MN' and 
cpd.payperiodnumber=egw.payperiodnumber and e.fedtaxid='546548321'
and (egw.empid,egw.payperiodnumber,egw.payrollyear) in (select empid,
payperiodid,payyear from tblcurpayresults where fedtaxid='546548321' order by empid) order by 
empid,payperiodnumber asc

我得到以下结果

enter image description here

预期结果如下

 Empname                   EmpID Payperiodno   Payrollyear   PaymentDate
Dorababu ldkfjg dlsfkgjwl   1430    1            2011        01-31-2012
Dorababu ldkfjg dlsfkgjwl   1430    2            2011        02-29-2012
Dorababu ldkfjg dlsfkgjwl   1430    3            2011        03-31-2012
Dorababu ldkfjg dlsfkgjwl   1430    4            2011        04-30-2012
Dorababu ldkfjg dlsfkgjwl   1430    5            2011        05-31-2012
Dorababu ldkfjg dlsfkgjwl   1430    6            2011        06-30-2012

任何人都可以帮助我

4 个答案:

答案 0 :(得分:0)

为什么ORDER BY cpd.paymentdate不起作用? 另一种方法是在每个表中都有一个补充列,例如“Created”,这是一个UNIX时间戳。

当然,您必须在每次插入时写入当前时间戳。请在此处阅读:http://www.keithjbrown.co.uk/vworks/mysql/mysql_p9.php

答案 1 :(得分:0)

代码重做:

SELECT DISTINCT 
    CONCAT(e.firstname, ' ', e.middleinitial, ' ', e.lastname) AS empname, 
    e.empid,
    egw.payperiodnumber,
    egw.payrollyear,
    DATE_FORMAT(cpd.paymentdate, '%m-%d-%Y') as PaymentDate
FROM 
    tblemployee e,
    tblemployeegrosswagesn egw,
    tblcustomerpaymentdates cpd
WHERE 
    e.empid=egw.empid 
AND e.fedtaxid=egw.fedtaxid 
AND egw.fedtaxid=cpd.fedtaxid
AND e.PayFrequencyTypeID=cpd.payfrequencytype 
AND cpd.payfrequencytype='MN' 
AND cpd.payperiodnumber=egw.payperiodnumber 
AND e.fedtaxid='546548321'
AND (egw.empid,egw.payperiodnumber,egw.payrollyear) IN 
(
    SELECT 
        empid, 
        payperiodid, 
        payyear 
    FROM 
        tblcurpayresults 
    WHERE 
        fedtaxid='546548321' 
    ORDER BY 
        empid
) 
ORDER BY 
    empid, payperiodnumber ASC;

是否需要第一个ORDER BY

如果添加TIMESTAMP列,则会在插入或更新行时使用当前日期/时间自动更新。你可以通过该列订购。

编辑:您也可以拥有information_schema.tables表,其中包含一个存储每个表更新时间的列。您可以查询此表,但我认为它仅适用于myISAM表。

答案 2 :(得分:0)

您是否考虑使用左连接来澄清您的代码,也许还有一些缩进/一般格式。

此外,您的数据看起来有点奇怪。为什么Payperiodno 1 = PaymentDate 07-31-2011但Payperiodno 4 = PaymentDate 04-30-2012?

根据事情看来,payperiodno是纳税月份,因此根据我对您的数据的假设,payperiodno 4应该=支付日期30-10-2011并保持连续,而不是从第9个月跳到第4个月。

答案 3 :(得分:0)

如果您不希望有时间戳,可以使用带有auto_increment的identity columt(代理键),然后在max SK _ ###上进行搜索,但没有任何明显的符号表示插入顺序/时间,您将会挣扎。

Marcus Culver