Мне удалось получить запрос, который работает, но мне любопытно, есть ли более лаконичный способ его построения (все еще учимся!).
blockquote>Основываясь на представленной вами схеме и предполагая, что ваш запрос действительно возвращает то, что вы ожидаете - ниже «оптимизированной» версии должен возвращаться тот же результат
#standardSQL WITH companies AS ( SELECT o.companyid AS companyid, STRUCT(o.properties.name.value, o.properties.name.timestamp) AS name, STRUCT(o.properties.industry.value, o.properties.industry.timestamp) AS industry, STRUCT(o.properties.lifecyclestage.value, o.properties.lifecyclestage.timestamp) AS lifecyclestage FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY o.companyid ORDER BY o._sdc_batched_at DESC) AS seqnum FROM `project.hubspot.companies` o ) o WHERE seqnum = 1 ) SELECT companyid, name.value AS name, industry.value AS industry, lifecyclestage.value AS lifecyclestage FROM companies
Как видите, я просто удалил [111 ] потому что у вас уже есть только одна запись / строка для каждой компании после подачи заявки
WHERE seqnum = 1
, поэтому нет никакой причины группировать только одну строку для каждой компании. По той же самой причине я удалилARRAY_AGG( ORDER BY)[SAFE_OFFSET(0)]
- она просто агрегировала одну структуру, а затем извлекла этот один элемент из массива - поэтому нет необходимости делать это
Jquery (или другие библиотеки ??) в основном сделает все это за вас. Я настоятельно рекомендую изучить это и не изобретать велосипед.
Для запроса, вероятно, будет выглядеть так:
// Make a call to url, with data
$.ajax(
{ url: $url,
data: $data,
dataType: 'xml',
callback: function(returnData) {
// Jquery find <mytag attribute="foo">...</mytag> and store it in mydata
var mydata = $(returnData).find('mytag[attribute=foo]');
// Insert into current page to somewhere with class="after-me"
$('.after-me').html(mydata);
}
});
У меня может быть неправильный синтаксис. Но вот документы: http://docs.jquery.com/Ajax/jQuery.ajax#options
Да, можно. Здесь вы найдете ресурс о том, как анализировать ответы XML.
Если вы загружаете его в уже существующее дерево DOM ( innerHTML
), вы должны иметь возможность вызывать стандартные функции обхода DOM, к которым вы привыкли.
теги сценария не будут работать в любом браузере любым способом .. поэтому для доступа к dom текущей страницы примените функцию "eval" к тексту сценария, который вы в данный момент запрашивали.
я имею в виду, если у вас есть html, например:
<div id="content">some html</div>
, и у вас есть текст сценария на стороне сервера, например
content.innerHTML = "foo";
, используйте функцию eval в ответе ajax
function onXmlHttpAnswer()
{
if(xmlHttp.readyState==4 && xmlHttp.status==200)eval(xmlHttp.responseText);
}
Не беспокойтесь о действительности , поскольку вы делаете это динамически с помощью javascript, вы можете заполнить innerHTML скрытого элемента данными вашего ответа, а затем использовать любые функции DOM / jQuery, которые вы хотите