Я не хочу красть гром Гордона здесь, потому что он сделал сложную роль.
Вот дополнительный бит , преобразующий NULL в «Первый раз».
create table #pivottabledata(Rownum int, PersonId int, Month int);
insert into #pivottabledata values(1,123,1);
insert into #pivottabledata values(2,123,2);
insert into #pivottabledata values(3,123,4);
insert into #pivottabledata values(4,123,5);
insert into #pivottabledata values(5,123,12);
insert into #pivottabledata values(1,222,1);
insert into #pivottabledata values(2,222,3);
insert into #pivottabledata values(3,222,4);
select * from #pivottabledata;
with cte (rownum,personid,month,diff) AS
(
select rownum, personid, month,
(month -
lag(month) over (partition by personid order by month)
) as diff
from #pivottabledata
)
SELECT rownum personid, month,
ISNULL(CAST(diff AS VARCHAR(max)), 'First Time') as diff
from cte;
Как упоминалось выше, я нашел решение и размещаю его здесь для справки и обратной связи.
Первый этап решения состоит в том, чтобы добавить на страницу следующее:
<!-- at the top of the content page -->
<IFRAME id="page_is_fresh" src="fresh.html" style="display:none;"></IFRAME>
<SCRIPT style="text/javascript">
function reload_stale_page() { location.reload(); }
</SCRIPT>
Содержимое fresh.html
не имеет значения, поэтому следующего должно быть достаточно:
<!-- fresh.html -->
<HTML><BODY></BODY></HTML>
Когда код на стороне клиента обновляет страницу, он должен пометить модификация следующим образом:
function trigger_reload_if_user_clicks_back_button()
{
// "dis-arm" the reload stale page function so it doesn't fire
// until the page is reloaded from the browser's cache
window.reload_stale_page = function(){};
// change the IFRAME to point to a page that will reload the
// page when it loads
document.getElementById("page_is_fresh").src = "stale.html";
}
stale.html
выполняет всю работу: После загрузки он вызовет функцию reload_stale_page
, которая при необходимости обновит страницу. При первой загрузке (т.е. после внесения изменений функция reload_stale_page
ничего не сделает.)
<!-- stale.html -->
<HTML><BODY>
<SCRIPT type="text/javascript">window.parent.reload_stale_page();</SCRIPT>
</BODY></HTML>
Судя по моему (минимальному) тестированию на этом этапе, похоже, что это работает должным образом. Я что-нибудь пропустил?