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

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

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

95741


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

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 245
Благодарностей
673
Баллы
113
Всем привет, камрады!

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

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

То есть, фильтруем бд по полю positionSide (значение LONG) и считаем с конца количество строк с непустыми полями close, пока не упремся в пустое...
Может кто помочь с запросом?
Есть понимание, как можно иначе решить данный вопрос, использую построчную обработку бд в связке с кубиками зенно, но есть подозрение, что запросом это решаемо и гораздо проще... Буду благодарен подсказкам и/или решению...
Пример базы данных можете выслать? "и считаем с конца количество строк с непустыми полями" а если самая первая ячейка пустая? Бросаем это дело или начинаем отсчет от ячейки где есть значение? И по итогу что? просто получить число сколько строк подряд идут со значением? или надо данные из этих строк получить?
 
Регистрация
26.05.2020
Сообщения
495
Благодарностей
172
Баллы
43
Пример базы данных можете выслать? "и считаем с конца количество строк с непустыми полями" а если самая первая ячейка пустая? Бросаем это дело или начинаем отсчет от ячейки где есть значение? И по итогу что? просто получить число сколько строк подряд идут со значением? или надо данные из этих строк получить?
Если самая первая пустая - не считаем ее. Данные со строк не нужны, нужно количество непустых ячеек 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: каюсь, был невнимателен при создании темы, подредачил чутка (для ПСов и пользователей зеннопоиска)
 

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
546
Благодарностей
1 125
Баллы
93
Всем привет, камрады!

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

Посмотреть вложение 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
Регистрация
26.05.2020
Сообщения
495
Благодарностей
172
Баллы
43
Получить строки в столбце close с содержанием "1""1":
SELECT * FROM Binance_trade WHERE close LIKE '1';
Не то, там может быть любая другая цифра. И нужно не строки получить, а их количество подряд... Но за попытку все равно благодарочка!
 

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
546
Благодарностей
1 125
Баллы
93
Не то, там может быть любая другая цифра. И нужно не строки получить, а их количество подряд... Но за попытку все равно благодарочка!
Выше есть небольшой дополнение)

Так что ли?
SQL:
SELECT count() FROM Binance_trade WHERE close >= 1;
 
  • Спасибо
Реакции: Sho

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 245
Благодарностей
673
Баллы
113
Не то, там может быть любая другая цифра. И нужно не строки получить, а их количество подряд... Но за попытку все равно благодарочка!
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# сниппет. Путь к БД не забудьте прописать в первом кусе кода.
 
Последнее редактирование:
Регистрация
26.05.2020
Сообщения
495
Благодарностей
172
Баллы
43
Регистрация
26.05.2020
Сообщения
495
Благодарностей
172
Баллы
43
Другое дело как вы эту конструкцию сейчас к своему коду будете колбасить. С другой стороны, если у вас таже библа подрублена что и у меня, можете первый кусок кода засунуть в общий код, а второй в c# сниппет. Путь к БД не забудьте прописать в первом кусе кода.
Не получилось завести, видимо, дело в отсутствующей либе (какой?) или что-то не так правил в коде...
Чет не так нагрешил... Общий код:

95764


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

95765


ЧЯДНТ?
 
Последнее редактирование:

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 245
Благодарностей
673
Баллы
113
Регистрация
26.05.2020
Сообщения
495
Благодарностей
172
Баллы
43

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 245
Благодарностей
673
Баллы
113
Выше приложил... Почему-то код из лога копироваться не хочет ))) В Сишарпе не совсем бум-бум...
Вы указали просто название ДБ а не полный путь к файлу.
Надо библу подрубить

using System.Data.SQLite;
 

Вложения

Регистрация
26.05.2020
Сообщения
495
Благодарностей
172
Баллы
43
Регистрация
26.05.2020
Сообщения
495
Благодарностей
172
Баллы
43
Так, с dll вроде разобрался - ссылки из GAC, верно?
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 245
Благодарностей
673
Баллы
113

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