2012-06-19 37 views
0

我目前正在製作一個程序,如果最後一個人的日期結束(某個時間範圍),它將發送一封電子郵件。我的表佈局是這樣的:mysql然後爲最新日期設置一個值

employee | dept. | date  | other | 
bob  | 1  | 2012-05-29 | abc | 
bob  | 1  | 2012-07-15 | xyz | 
jon  | 2  | 2012-05-29 | abc | 

(我有員工然後日期與MySQL排序) 所以舉例來說,鮑勃我想自動變量分配到日期2012-07-15因爲是他最後一次錄入的日期。然後根據當前日期我想發送一封電子郵件,如果在提交之間的時間已經很長。我的問題是如何將變量分配給表中每個人的最後日期?我也接受不同的更好的方式來做到這一點。謝謝。

回答

1

要返回每個員工的最新日期,類似這樣的工作將會起作用。

SELECT employee 
    , MAX(`date`) AS latest_date 
    FROM mytable 
GROUP BY employee 
ORDER BY employee 

附錄,

由於simbabque指出,這適用於獲取最新的日期,但不會返回other值。有幾種方法來獲得結果集。 (例如,通過一個獨特的約束):

SELECT t.employee, t.`date`, t.other 
FROM mytable t 
JOIN (SELECT r.employee, MAX(r.`date`) AS latest_date 
     FROM mytable r 
     GROUP BY r.employee 
    ) s 
    ON s.employee = t.employee 
    AND s.latest_date = t.`date` 
ORDER BY t.employee 

如果我們保證了(員工,日期)是獨一無二的,我們可以在具有最新的日期與這樣的查詢的行返回其他列

如果我們不能保證(員工,日期)是唯一的,這個查詢是不夠的。但是有幾種方法可以解決這個問題。

+0

好,謝謝這個有很大幫助,雖然我如何使它所以每個LATEST_DATE具有安裝的日期和變量名員工? – BluGeni

+0

這將工作,如果@BluGeni只需要日期。但是,如果他想在他的電子郵件中發送*其他*,則不會。 – simbabque

+0

你知道如何使用[DBI](http://search.cpan.org/~timb/DBI-1.622/DBI.pm)嗎? – simbabque

1

這是Perl的解決方案。對SQL查詢的信用轉到@ spencer7593。

如果您不熟悉DBI我建議您快速瀏覽一下。另請參閱DBD::mysql以查看如何創建數據源(DSN)。

您基本上需要連接到數據庫,準備好您的查詢,執行它並獲取結果。然後您可以使用它們發送您的電子郵件。

下面是一個簡單的例子,並不包括實際的電子郵件發送:

use strict; 
use warnings; 
use DBI; 
require 'script_that_has_custom_email_sub.pl'; # or use a module or whatever 

# create the database handle 
my $dbh = DBI->connect("DBI:mysql:database=test;host=localhost", # <-- DSN 
         'username', 'password') 
      or die $DBI::errstr; 

# prepare the query to get a statement handle 
my $sth = $dbh->prepare(<<__SQL__ 
SELECT employee 
    , MAX(`date`) AS latest_date 
    FROM mytable 
GROUP BY employee 
ORDER BY employee 
__SQL__ 
); 
$sth->execute; # send the query to the mysql server 

# fetch each row of the result as a hashref 
while (my $res = $sth->fetchrow_hashref) { 
    # access $res with the keys employee and latest_date from the query 
    # and send the mail 
    &custom_send_email_sub($res->{'employee'}, $res->{'latest_date'}); 
} 
$sth->finish; 
相關問題