複数の行を持つテーブルにクエリを実行したいと思います。それぞれの行にtimestamp
は 10 分間隔でデータが送信されます。timestamp
次のように、次の 10 分間隔に等しくない欠落データの始まりを見つけたいと思います。
select a.[timestamp]
from [table] as a
where not exists (select 1
from [table] as b
where a.[id] = b.[id]
and b.[timestamp] = dateadd(mi, 10, a.[timestamp]))
order by a.[timestamp]
私はこれまでのところこれを持っていますが、上記のクエリでb.[timestamp] = dateadd(mi, 10, a.[timestamp])を実行できるようにするクエリを作成する方法がわかりません。
Table tableAlias = null;
IList<DateTimeOffset> dateTimeOffsets = session.QueryOver(() => tableAlias)
.WithSubquery
.WhereNotExists(QueryOver.Of<Table>()
.Where(x => x.Id == tableAlias.Id)
.And(Restrictions.Eq(Projections.SqlFunction("addminutes",
NHibernateUtil.DateTimeOffset,
new[]
{
Projections.Property("Timestamp"),
Projections.Constant(10)
}),
<insert timestamp property again here>))
.Select(Projections.Constant(1)))
.Select(x => x.Timestamp)
.List<DateTimeOffset>();
私は sqlfuntion 部分の制限に頭を悩ませることができません - Nhibernate
sqlfunction とタイムスタンプの比較をさせてくれません。
上記のコードで正しい軌道に乗っていることを願っていますが、これを解決しようとして完全にずれている場合は修正してください...
敬具