  Traditional ways of storing and querying data do not work well in scenarios
where data is being generated continuously and quick decisions need to be
taken. For example, in hospital intensive care units, signals from multiple
devices need to be monitored and the occurrence of any anomaly should raise
alarms immediately. A typical design would take the average from a window of
say 10 seconds (time-based) or 10 successive (count-based) readings and look
for sudden deviations. Existing stream processing systems either restrict the
windows to time or count-based windows or let users define customized windows
in imperative programming languages. These are subject to the implementers'
interpretation of what is desired and hard to understand for others. We
introduce a formalism for specifying windows based on Monadic Second Order
logic. It offers several advantages over ad-hoc definitions written in
imperative languages. We demonstrate four such advantages. First, we illustrate
how practical streaming data queries can be easily written with precise
semantics. Second, we can get different but expressively equivalent formalisms
for defining windows. We use one of them (regular expressions) to design an
end-user-friendly language for defining windows. Third, we use another
expressively equivalent formalism (automata) to design a processor that
automatically generates windows according to specifications. The fourth
advantage we demonstrate is more sophisticated. Some window definitions have
the problem of too many windows overlapping with each other, overwhelming the
processing engine. This is handled in different ways by different engines, but
all the options are about what to do when this happens at runtime. We study
this as a static analysis question and prove that it is undecidable to check
whether such a scenario can ever arise for a given window definition. We
identify a decidable fragment...
