我正在尝试使用 MarkLogic 中的光学查询根据日期字段(预订创建日期)获取列值的最后 6 个月计数。
通过以下查询,我可以在预订日期小于当前日期时获取记录数。 我需要做的是获取我的预订日期中距当前日期 6 个月前的日期,并计算该日期之后的记录。我在 xquery 中成功创建了相同的内容。
但是我无法在光学查询中从当前日期中减去 6 个月前的日期。 你能帮忙吗?
这是我正在使用的光学查询:
import module namespace op="http://marklogic.com/optic" at "/MarkLogic/optic.xqy";
import module namespace ofn="http://marklogic.com/optic/expression/fn" at "/MarkLogic/optic/optic-fn.xqy";
declare option xdmp:mapping "false";
op:from-view("GTM2_Shipment", "Shipment_View")
=> op:where(op:and((
op:eq(op:col("transMode"), 'Road'),op:gt(op:col("Ancillary_QuotePrice"), 0),op:lt(ofn:format-dateTime(op:col('BookingCreateDt'), '[Y0001]-[M01]-[D01]'),ofn:format-dateTime(fn:current-dateTime(),'[Y0001]-[M01]-[D01]'))
))
)
=> op:group-by("transMode", op:count("QuotePrice", "Ancillary_QuotePrice"))
=> op:result()
您可以从 xs:yearMonthDuration("P6M")
中减去
fn:current-dateTime()
:
fn:current-dateTime() - xs:yearMonthDuration("P6M")
此外,您当前正在比较格式化日期时间的字符串值的大于和小于。虽然它们确实按字典顺序排序为字符串,但比较日期时间值更容易。
=> op:where(
op:and((
op:eq(op:col("transMode"), 'Road'),
op:gt(op:col("Ancillary_QuotePrice"), 0),
op:lt(op:col('BookingCreateDt'), fn:current-dateTime() - xs:yearMonthDuration("P6M"))
))
)