Sqlite3 - как получить количество последних непустых ячеек подряд?

Регистрация
26.05.2020
Сообщения
588
Реакции
205
Баллы
43
Всем привет, камрады!

Возникла такая задача - подсчитать количество последних строк с непустыми ячейками подряд. На скрине пример того, что хочу подсчитать

95741


То есть, фильтруем бд по полю positionSide (значение LONG) и считаем с конца количество строк с непустыми полями close, пока не упремся в пустое...
Может кто помочь с запросом?
Есть понимание, как можно иначе решить данный вопрос, использую построчную обработку бд в связке с кубиками зенно, но есть подозрение, что запросом это решаемо и гораздо проще... Буду благодарен подсказкам и/или решению...
 
Последнее редактирование:
Всем привет, камрады!

Возникла такая задача - подсчитать количество последних строк с ячейками с определенным значением подряд. На скрине пример того, что хочу подсчитать

Посмотреть вложение 95741

То есть, фильтруем бд по полю positionSide (значение LONG) и считаем с конца количество строк с непустыми полями close, пока не упремся в пустое...
Может кто помочь с запросом?
Есть понимание, как можно иначе решить данный вопрос, использую построчную обработку бд в связке с кубиками зенно, но есть подозрение, что запросом это решаемо и гораздо проще... Буду благодарен подсказкам и/или решению...
Пример базы данных можете выслать? "и считаем с конца количество строк с непустыми полями" а если самая первая ячейка пустая? Бросаем это дело или начинаем отсчет от ячейки где есть значение? И по итогу что? просто получить число сколько строк подряд идут со значением? или надо данные из этих строк получить?
 
Пример базы данных можете выслать? "и считаем с конца количество строк с непустыми полями" а если самая первая ячейка пустая? Бросаем это дело или начинаем отсчет от ячейки где есть значение? И по итогу что? просто получить число сколько строк подряд идут со значением? или надо данные из этих строк получить?
Если самая первая пустая - не считаем ее. Данные со строк не нужны, нужно количество непустых ячеек close (IS NOT NULL) подряд. То есть, из примера бд я должен получить число 2, так как последними идут две подряд непустые ячейки.
SQL:
Развернуть Свернуть Копировать
INSERT INTO Binance_trade (
                              notionalValue,
                              close,
                              open,
                              price,
                              side,
                              positionSide,
                              symbol,
                              date,
                              orderId
                          )
                          VALUES (
                              0.00440973,
                              1,
                              NULL,
                              22677.1,
                              'BUY',
                              'SHORT',
                              'BTCUSD_PERP',
                              '2 Aug 2022 09:24:30',
                              62096100808
                          ),
                          (
                              0.00440878,
                              NULL,
                              1,
                              22682,
                              'BUY',
                              'LONG',
                              'BTCUSD_PERP',
                              '2 Aug 2022 09:24:30',
                              62096105422
                          ),
                          (
                              0.00423378,
                              NULL,
                              1,
                              23619.6,
                              'SELL',
                              'SHORT',
                              'BTCUSD_PERP',
                              '3 Aug 2022 12:15:32',
                              62225646352
                          ),
                          (
                              0.00423843,
                              1,
                              NULL,
                              23593.6,
                              'SELL',
                              'LONG',
                              'BTCUSD_PERP',
                              '3 Aug 2022 12:15:35',
                              62225666961
                          ),
                          (
                              0.00409658,
                              1,
                              NULL,
                              24410.6,
                              'SELL',
                              'LONG',
                              'BTCUSD_PERP',
                              '11 Aug 2022 04:54:33',
                              62977335174
                          ),
                          (
                              0.00409658,
                              NULL,
                              1,
                              24410.6,
                              'SELL',
                              'SHORT',
                              'BTCUSD_PERP',
                              '11 Aug 2022 04:54:33',
                              62977335464
                          );
PS: каюсь, был невнимателен при создании темы, подредачил чутка (для ПСов и пользователей зеннопоиска)
 
Всем привет, камрады!

Возникла такая задача - подсчитать количество последних строк с непустыми ячейками подряд. На скрине пример того, что хочу подсчитать

Посмотреть вложение 95741

То есть, фильтруем бд по полю positionSide (значение LONG) и считаем с конца количество строк с непустыми полями close, пока не упремся в пустое...
Может кто помочь с запросом?
Есть понимание, как можно иначе решить данный вопрос, использую построчную обработку бд в связке с кубиками зенно, но есть подозрение, что запросом это решаемо и гораздо проще... Буду благодарен подсказкам и/или решению...
Если самая первая пустая - не считаем ее. Данные со строк не нужны, нужно количество непустых ячеек close (IS NOT NULL) подряд. То есть, из примера бд я должен получить число 2, так как последними идут две подряд непустые ячейки.
SQL:
Развернуть Свернуть Копировать
INSERT INTO Binance_trade (
                              notionalValue,
                              close,
                              open,
                              price,
                              side,
                              positionSide,
                              symbol,
                              date,
                              orderId
                          )
                          VALUES (
                              0.00440973,
                              1,
                              NULL,
                              22677.1,
                              'BUY',
                              'SHORT',
                              'BTCUSD_PERP',
                              '2 Aug 2022 09:24:30',
                              62096100808
                          ),
                          (
                              0.00440878,
                              NULL,
                              1,
                              22682,
                              'BUY',
                              'LONG',
                              'BTCUSD_PERP',
                              '2 Aug 2022 09:24:30',
                              62096105422
                          ),
                          (
                              0.00423378,
                              NULL,
                              1,
                              23619.6,
                              'SELL',
                              'SHORT',
                              'BTCUSD_PERP',
                              '3 Aug 2022 12:15:32',
                              62225646352
                          ),
                          (
                              0.00423843,
                              1,
                              NULL,
                              23593.6,
                              'SELL',
                              'LONG',
                              'BTCUSD_PERP',
                              '3 Aug 2022 12:15:35',
                              62225666961
                          ),
                          (
                              0.00409658,
                              1,
                              NULL,
                              24410.6,
                              'SELL',
                              'LONG',
                              'BTCUSD_PERP',
                              '11 Aug 2022 04:54:33',
                              62977335174
                          ),
                          (
                              0.00409658,
                              NULL,
                              1,
                              24410.6,
                              'SELL',
                              'SHORT',
                              'BTCUSD_PERP',
                              '11 Aug 2022 04:54:33',
                              62977335464
                          );
PS: каюсь, был невнимателен при создании темы, подредачил чутка (для ПСов и пользователей зеннопоиска)
Получить строки в столбце close с содержанием "1":
Развернуть Свернуть Копировать
SELECT * FROM Binance_trade WHERE close LIKE '1';
/*или*/
SELECT * FROM Binance_trade WHERE close >= 1;
 
  • Спасибо
Реакции: Sho и Андрейка2020
Получить строки в столбце close с содержанием "1""1":
Развернуть Свернуть Копировать
SELECT * FROM Binance_trade WHERE close LIKE '1';
Не то, там может быть любая другая цифра. И нужно не строки получить, а их количество подряд... Но за попытку все равно благодарочка!
 
Не то, там может быть любая другая цифра. И нужно не строки получить, а их количество подряд... Но за попытку все равно благодарочка!
Выше есть небольшой дополнение)

Так что ли?
SQL:
Развернуть Свернуть Копировать
SELECT count() FROM Binance_trade WHERE close >= 1;
 
  • Спасибо
Реакции: Sho
Не то, там может быть любая другая цифра. И нужно не строки получить, а их количество подряд... Но за попытку все равно благодарочка!

C#:
Развернуть Свернуть Копировать
public class DB
    {
        public SQLiteConnection OpenConnectDb()
        {
            try
            {
                string Connection = @"Data Source=testbase.db";   // testbase.db это ПУТЬ К БАЗЕ ДАННЫХ
                SQLiteConnection sqliteConnection = new SQLiteConnection(Connection);
                sqliteConnection.Open();
                return sqliteConnection;
            }
            catch (Exception ex)
            {
                throw new Exception("Не удалось открыть соединение с БД. " + ex.Message);
            }
        }//Подключение к БД
    }

C#:
Развернуть Свернуть Копировать
SQLiteConnection sqliteConnection = new DB().OpenConnectDb();

            string ProfileStringRequest = String.Format(
                "SELECT close " +
                "FROM Binance_trade " +
                "WHERE positionSide = 'LONG' " +
                "ORDER BY positionSide "
                 );


            var sQLiteCommand = new SQLiteCommand(ProfileStringRequest, sqliteConnection);


            int counter = 0;
            bool flag = false;

            var reader = sQLiteCommand.ExecuteReader();
            List<string> list = new List<string>();
            while (reader.Read())
            {

                list.Add(reader.GetValue(0).ToString());

            }

            foreach (var item in list)
            {
                if (String.IsNullOrEmpty(item))
                {
                    if (flag == true)
                    {
                        goto result;
                    }
               
                }

                else
                {
                    flag = true;
                    counter++;
                }
            }
            result:
            sqliteConnection.Close();
            return counter;

На примере что вы скидывали, работает нормас, выдает 2 на выходе. Другое дело как вы эту конструкцию сейчас к своему коду будете колбасить. С другой стороны, если у вас таже библа подрублена что и у меня, можете первый кусок кода засунуть в общий код, а второй в c# сниппет. Путь к БД не забудьте прописать в первом кусе кода.
 
Последнее редактирование:
Другое дело как вы эту конструкцию сейчас к своему коду будете колбасить. С другой стороны, если у вас таже библа подрублена что и у меня, можете первый кусок кода засунуть в общий код, а второй в c# сниппет. Путь к БД не забудьте прописать в первом кусе кода.
Не получилось завести, видимо, дело в отсутствующей либе (какой?) или что-то не так правил в коде...
Чет не так нагрешил... Общий код:

95764


Сам кубик (внесенные правки)

95765


ЧЯДНТ?
 
Последнее редактирование:
Выше приложил... Почему-то код из лога копироваться не хочет ))) В Сишарпе не совсем бум-бум...
Вы указали просто название ДБ а не полный путь к файлу.
Надо библу подрубить

using System.Data.SQLite;
 

Вложения

Так, с dll вроде разобрался - ссылки из GAC, верно?
 
Так, с dll вроде разобрался - ссылки из GAC, верно?
Да, а пути тип такого должен быть, если ДБ лежит в папке с проектом
C#:
Развернуть Свернуть Копировать
string Connection = @"Data Source=" + project.Directory + @"\Helicopter_database.db";
Юсинг сюда писать
95771
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)