1

私はまだSQLite、より具体的にはSQLに慣れていないので、気楽にやってください。SQLiteデータベースには次のような3つのテーブルがあります。

TableA
DateAdded  Data1  Data2
1/1/2012   a      b
1/3/2012   c      d
1/2/2012   e      f

TableB
DateAdded  Data3  Data4
1/6/2012   g      h
1/5/2012   i      j
1/4/2012   k      l

TableC
DateAdded  Data5  Data6
1/8/2012   m      n
1/9/2012   o      p
1/7/2012   q      r

各テーブルには、データ型DateAddedである列があります。3つのテーブルすべてのdatetime最新の値を取得したいと思います。datetime

今、私は各テーブルを一度に1つずつ実行し、結果を比較します。

private DateTime GetEndTime()
{
    DateTime retVal = new DateTime();
    DateTime sa = new DateTime();
    DateTime gps = new DateTime();

    SQLiteCommand cmd = mySQL.CreateCMD();
    SQLiteDataReader dbReader = mySQL.ExecuteQuerySQL("SELECT DateAdded FROM DF ORDER BY ROWID DESC LIMIT 1", cmd);
    if (dbReader.HasRows)
    {
        dbReader.Read();
        retVal = dbReader.GetDateTime(0);
    }
    dbReader.Close();

    dbReader = mySQL.ExecuteQuerySQL("SELECT DateAdded FROM SA ORDER BY ROWID DESC LIMIT 1", cmd);
    if (dbReader.HasRows)
    {
        dbReader.Read();
        sa = dbReader.GetDateTime(0);
    }
    dbReader.Close();

    if (retVal < sa)
        retVal = sa;

    dbReader = mySQL.ExecuteQuerySQL("SELECT DateAdded FROM GPS ORDER BY ROWID DESC LIMIT 1", cmd);
    if (dbReader.HasRows)
    {
        dbReader.Read();
        gps = dbReader.GetDateTime(0);
    }
    dbReader.Close();
    mySQL.disposeCMD(cmd);

    if (retVal < gps)
        retVal = gps;

    return retVal;
}

もっと良い方法があるに違いないことを私は知っています。助言がありますか?

4

2 に答える 2

3

次のように、各テーブルから最大日付追加を選択し、それらの行を結合して最大を選択できます。

select MAX(MaxDateAdded) from
(
 select MAX(DateAdded) as MaxDateAdded from a 
 union
 select MAX(DateAdded) as MaxDateAdded from b
 union
 select MAX(DateAdded) as MaxDateAdded from c
) AS UnionedDateAddedTables
于 2012-10-01T18:28:38.363 に答える
2
SELECT MAX(DateAdded)
FROM
(
SELECT MAX(DateAdded) AS DateAdded FROM tableA
UNION
SELECT MAX(DateAdded) AS DateAdded FROM tableb
UNION
SELECT MAX(DateAdded) AS DateAdded FROM tablec
)

編集

私は交換しています:

Instead of selecting all rows

SELECT MAX(DateAdded) AS DateAdded FROm table

@dugasに感謝します

于 2012-10-01T18:27:01.880 に答える