1
SELECT id AS ticket, status, priority, reporter, owner, 
       time AS created, summary
  FROM ticket
  WHERE status IN ('new', 'assigned', 'reopened') and reporter = $USER
  ORDER BY time, priority

私は、レポーターが、現在開いているが追跡するのが初めての期限切れのチケットを表示できるようにしようとしています。現在の日付を使用したヘルプは大歓迎です。

4

2 に答える 2

1

タスクを達成するには、次のことを行う必要があります

  • カスタムチケットフィールドdue_dateなどをセットアップします(おそらくあなたのケースではすでに行われています)
  • Trac db テーブルで JOIN を使用して、ticket_customそのフィールド値を取得します
  • 現在の日付を取得 (タイムスタンプ)
  • due_date と現在の日付の少なくとも 1 つ (おそらく両方) を比較のために変換します

ここでは 1 + 2 をスキップします。StackOverflow に関する既存のドキュメントがあるためです (つまり、trac レポートで期日列を表示する方法を参照してください)。

NOW()へのアクセス:レポートに関する信頼できる wiki ドキュメントによると、Trac レポートに動的に割り当てられる変数は $USER のみです。そのため、SQL 関数を使用する必要があります。移植可能なソリューションが見つからなかったため、db バックエンドに応じた提案を以下に示します。

  • SQLite (Trac のデフォルト):current_dateまたはdatetime('now','localtime')
  • PostgreSQL:current_timestampまたはnow()

最後のサブタスクについて: Trac 1.1.1 以降でサポートされているように、おそらく (まだ) 真のカスタム時間フィールドを使用していません。これは、開発スナップショット リリースであり、まだ最先端に近いためです。以下で説明するように、文字列変換の回避策を使用する手間が省けるため、完全を期すために指摘するだけです。

今のところおそらく使用しているのは文字列ですが、DateFieldPluginによって提供される入力方法が改善されている可能性があります。ただし、文字列値は、最初は SQL ステートメント内での直接比較には役に立ちません。レポートを機能させるには、すべての文字列を日付値または整数に変換する必要があります。タイムスタンプの変換に関連するため、Trac で特定の日付にクローズされたチケットを含むレポートを作成する方法を参照してください。Trac のバージョンに応じて、ネイティブの Trac 時間列形式 (整数値) を使用することをお勧めします。

  • Trac <= 0.11: POSIX 秒
  • Trac >= 0.12: POSIXマイクロ

しかし、公開された例dateでは、SQL ステートメントで関数を使用することを推奨しています (SQLite 用)。日付文字列の形式によっては、文字列を適切な形式に変換する必要があります。つまり、 DateFieldPluginsubstrのサンプル レポートに示されているように使用します。

ピースをまとめる (SQLite の例、MM/DD/YYYYdue_date 文字列形式と仮定):

SELECT id AS ticket, status, priority, reporter, owner, 
       time AS created, summary, tc.value as date
  FROM ticket t
LEFT JOIN ticket_custom tc on t.id = tc.ticket and tc.name= 'due_date'
  WHERE status IN ('new', 'assigned', 'reopened') and reporter = $USER
       and date(substr(tc.value,7,4)||"-"||substr(tc.value,1,2)||"-"||substr(tc.value,4,2)) < current_date
  ORDER BY time, priority
于 2013-04-27T15:06:07.113 に答える
0

自分で考えて、この投稿を忘れていましたが、完成のためにクエリを投稿します。

SELECT p.value AS __color__, id AS ticket, status, owner, c1.value AS company,
       time AS created,  c.value AS target_date, summary, p.value as Priority
  FROM ticket t 
  LEFT JOIN enum p ON p.name = t.priority
  LEFT JOIN ticket_custom c ON t.id=c.ticket AND c.name='target_date'
  LEFT JOIN ticket_custom c1 ON t.id=c1.ticket AND c1.name='company'
  WHERE status IN ('new', 'assigned', 'reopened') and reporter= $USER and CURRENT_DATE > target_date
  ORDER BY target_date
于 2013-04-29T16:11:50.723 に答える